Hadoop 简介
Hadoop 由 Apache 基金会开发的分布式系统基础架构, 是利用集群对大量数据进行分布式处理和存储的软件框架. 用户可以轻松地在 Hadoop 集群上开发和运行处理海量数据的应用程序. Hadoop 有高可靠, 高扩展, 高效性, 高容错等优点. Hadoop 框架最核心的设计就是 HDFS 和 MapReduce.HDFS 为海量的数据提供了存储, MapReduce 为海量的数据提供了计算. 此外, Hadoop 还包括了 Hive,Hbase,ZooKeeper,Pig,Avro,Sqoop,Flume,Mahout 等项目.
Hadoop 的运行模式分为 3 种: 本地运行模式, 伪分布运行模式, 完全分布运行模式.
本地模式(local mode)
这种运行模式在一台单机上运行, 没有 HDFS 分布式文件系统, 而是直接读写本地操作系统中的文件系统. 在本地运行模式 (local mode) 中不存在守护进程, 所有进程都运行在一个 JVM 上. 单机模式适用于开发阶段运行 MapReduce 程序, 这也是最少使用的一个模式.
伪分布模式
这种运行模式是在单台服务器上模拟 Hadoop 的完全分布模式, 单机上的分布式并不是真正的分布式, 而是使用线程模拟的分布式. 在这个模式中, 所有守护进程 (NameNode,DataNode,ResourceManager,NodeManager,SecondaryNameNode) 都在同一台机器上运行. 因为伪分布运行模式的 Hadoop 集群只有一个节点, 所以 HDFS 中的块复制将限制为单个副本, 其 secondary-master 和 slave 也都将运行于本地主机. 此种模式除了并非真正意义的分布式之外, 其程序执行逻辑完全类似于完全分布式, 因此, 常用于开发人员测试程序的执行. 本次实验就是在一台服务器上进行伪分布运行模式的搭建.
完全分布模式
这种模式通常被用于生产环境, 使用 N 台主机组成一个 Hadoop 集群, Hadoop 守护进程运行在每台主机之上. 这里会存在 Namenode 运行的主机, Datanode 运行的主机, 以及 SecondaryNameNode 运行的主机. 在完全分布式环境下, 主节点和从节点会分开.
实验环境
Linux Ubuntu 14.04
安装步骤
创建一个新用户及用户组
此步为可选项, 建议用户创建一个新用户及用户组, 后续的操作基本都是在此用户下来操作. 但是用户亦可在自己当前非 root 用户下进行操作.
创建一个用户, 名为 zhangyu, 并为此用户创建 home 目录, 此时会默认创建一个与 zhangyu 同名的用户组.
sudo useradd -d /home/zhangyu -m zhangyu
为 zhangyu 用户设置密码
sudo passwd zhangyu
将 zhangyu 用户的权限, 提升到 sudo 超级用户级别
sudo usermod -G sudo zhangyu
切换到 zhangyu 用户完成后续操作
su zhangyu
配置 SSH 免密码登陆
SSH 免密码登陆需要在服务器执行以下命令, 生成公钥和私钥对
注意: 此时会有多处提醒输入在冒号后输入文本, 这里主要是要求输入 SSH 密码以及密码的放置位置. 在这里, 只需要使用默认值, 按回车即可.
SSH-keygen -t rsa
此时 SSH 公钥和私钥已经生成完毕, 且放置在~/.SSH 目录下. 切换到~/.SSH 目录下; 在~/.SSH 目录下, 创建一个空文本, 名为 authorized_keys; 并将存储公钥文件的 id_rsa.pub 里的内容, 追加到 authorized_keys 中.
- cd ~./.SSH
- touch ~/.SSH/authorized_keys
- cat ~/.SSH/id_rsa.pub>> ~/.SSH/authorized_keys
下面执行 SSH localhost 测试 SSH 配置是否正确(一次使用 SSH 访问, 会提醒是否继续连接 )
SSH localhost
如果控制台打印出欢迎语句说明 SSH 免密码登录配置成功, 后续再执行 SSH localhost 时, 就不用输入密码了.
Hadoop 的安装
安装前的准备工作
首先创建两个目录: apps 和 data. 两个目录的作用分别为:/apps 目录用来存放安装的框架,/data 目录用来存放临时数据, HDFS 数据, 程序代码或脚本.
- sudo mkdir /apps
- sudo mkdir /data
并为 / apps 和 / data 目录切换所属的用户为 zhangyu 及用户组为 zhangyu
- sudo chown -R zhangyu:zhangyu /apps
- sudo chown -R zhangyu:zhangyu /data
在根目录执行 ls -l 命令, 如果看到根目录下 / apps 和 / data 目录所属用户及用户组已切换为 zhangyu:zhangyu, 说明用户和用户组切换成功.
配置 java 和 Hadoop 环境
创建 / data/hadoop1 目录, 用来存放相关安装工具, 如 jdk 安装包 jdk-7u75-Linux-x64.tar.gz 及 hadoop 安装包 hadoop-2.6.0-cdh5.4.5.tar.gz.
mkdir -p /data/hadoop1
切换目录到 / data/hadoop1 目录, 使用 wget 命令, 下载所需的 hadoop 安装包 jdk-7u75-Linux-x64.tar.gz 及 hadoop-2.6.0-cdh5.4.5.tar.gz.
- cd /data/hadoop1
- wget http://59.64.78.41:60000/allfiles/hadoop1/jdk-7u75-linux-x64.tar.gz
- wget http://59.64.78.41:60000/allfiles/hadoop1/hadoop-2.6.0-cdh5.4.5.tar.gz
安装 jdk. 将 / data/hadoop1 目录下 jdk-7u75-Linux-x64.tar.gz 解压缩到 / apps 目录下.(其中, tar -xzvf 对文件进行解压缩,-C 指定解压后, 将文件放到 / apps 目录下)
tar -xzvf /data/hadoop1/jdk-7u75-Linux-x64.tar.gz -C /apps
切换到 / apps 目录下, 将 jdk1.7.0_75 目录重命名为 java
mv /apps/jdk1.7.0_75/ /apps/java
下面来修改环境变量: 系统环境变量或用户环境变量. 我们在这里修改用户环境变量. 打开存储环境变量的文件( .bashrc ). 空几行, 将 java 的环境变量, 追加进用户环境变量中.
- # java
- export JAVA_HOME=/apps/java
- export PATH=$JAVA_HOME/bin:$PATH
让环境变量立即生效
source ~/.bashrc
执行 source 命令, 让 java 环境变量生效. 执行完毕后, 可以输入 java, 来测试环境变量是否配置正确.
安装 hadoop, 切换到 / data/hadoop1 目录下, 将 hadoop-2.6.0-cdh5.4.5.tar.gz 解压缩到 / apps 目录下.
- cd /data/hadoop1
- tar -xzvf /data/hadoop1/hadoop-2.6.0-cdh5.4.5.tar.gz -C /apps/
为了便于操作, 我们也将 hadoop-2.6.0-cdh5.4.5 重命名为 hadoop.
mv /apps/hadoop-2.6.0-cdh5.4.5/ /apps/hadoop
修改用户环境变量, 将 hadoop 的路径添加到 path 中. 先打开用户环境变量文件(.bashrc), 并将 Hadoop 的环境变量追加到这个环境变量配置文件中.
- sudo VIM ~/.bashrc
- # 将下列内容写在. bashrc 文件中
- #hadoop
- export HADOOP_HOME=/apps/hadoop
- export PATH=$HADOOP_HOME/bin:$PATH
让环境变量立即生效
source ~/.bashrc
验证 hadoop 环境变量配置是否正常, 如果正常打印出 Hadoop 的版本信息表明配置正确.
hadoop version
修改 Hadoop 自身的一些配置
编辑 hadoop-env.sh 文件
切换到 Hadoop 的配置目录下, 编辑 hadoop-env.sh 文件
- cd /apps/hadoop/etc/hadoop
- VIM /apps/hadoop/etc/hadoop/hadoop-env.sh
将下面 JAVA_HOME 追加到 hadoop-env.sh 文件中.
export JAVA_HOME=/apps/java
编辑 core-site.xml 文件
打开 core-site.xml 配置文件
VIM /apps/hadoop/etc/hadoop/core-site.xml
添加下面配置到 < configuration > 与</configuration > 标签之间
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/data/tmp/hadoop/tmp</value>
- </property>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://0.0.0.0:9000</value>
- </property>
配置项说明:
hadoop.tmp.dir, 配置 hadoop 处理过程中, 临时文件的存储位置. 这里的目录 / data/tmp/hadoop/tmp 需要提前创建
fs.defaultFS, 配置 hadoop HDFS 文件系统的地址
编辑 hdfs-site,xml 文件
打开 hdfs-site.xml 配置文件
VIM /apps/hadoop/etc/hadoop/hdfs-site.xml
添加下面配置到 < configuration > 与</configuration > 标签之间
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/data/tmp/hadoop/hdfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/data/tmp/hadoop/hdfs/data</value>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.permissions.enabled</name>
- <value>false</value>
- </property>
配置项说明:
dfs.namenode.name.dir, 配置元数据信息存储位置
dfs.datanode.data.dir, 配置具体数据存储位置
dfs.replication, 配置每个数据库备份数, 由于目前我们使用 1 台节点, 所以, 设置为 1, 如果设置为 2 的话, 运行会报错
dfs.replications.enabled, 配置 hdfs 是否启用权限认证
另外 / data/tmp/hadoop/hdfs 路径, 需要提前创建, 所以我们需要执行
mkdir -p /data/tmp/hadoop/hdfs
编辑 slaves 文件
打开 slaves 配置文件
VIM /apps/hadoop/etc/hadoop/slaves
将集群中 slave 角色的节点的主机名, 添加进 slaves 文件中. 目前只有一台节点, 所以 slaves 文件内容为:
localhost
下面格式化 HDFS 文件系统 , 执行:
hadoop namenode -format
切换目录到 / apps/hadoop/sbin 目录下, 启动 Hadoop 的 hdfs 相关进程
- cd /apps/hadoop/sbin/
- ./start-dfs.sh
在终端中输入 jps 命令查看 HDFS 相关进程是否启动, 如果出现 Datanode,NameNode,SecondaryNameNode,Jps 这些字眼, 说明 HDFS 相关进程已经启动.
下面验证 HDFS 的运行状态
先在 HDFS 上创建一个目录
hadoop fs -mkdir /myhadoop1
执行下面命令, 查看目录是否创建成功
hadoop fs -ls -R /
配置 MapReduce
切换到 hadoop 配置文件目录
cd /apps/hadoop/etc/hadoop
将 mapreduce 的配置文件 mapred-site.xml.template, 重命名为 mapred-site.xml
mv /apps/hadoop/etc/hadoop/mapred-site.xml.template /apps/hadoop/etc/hadoop/mapred-site.xml
编辑 mapred-site.xml 文件
VIM /apps/hadoop/etc/hadoop/mapred-site.xml
将 mapreduce 相关配置, 添加到 < configuration > 标签之间
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
这里指定 mapreduce 任务处理所使用的框架 --> yarn
编辑 yarn-site.xml 文件
VIM /apps/hadoop/etc/hadoop/yarn-site.xml
将 yarn 相关配置, 添加到 < configuration > 标签之间
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
启动 yarn
下面来启动计算层面相关进程, 切换到 hadoop 启动目录
cd /apps/hadoop/sbin/
执行命令, 启动 yarn
./start-yarn.sh
在终端中输入 jps 命令查看 HDFS 相关进程是否启动, 如果出现 Datanode, NameNode,SecondaryNameNode,Jps,ResourceManager,NodeManager 这些字眼, 说明 HDFS 相关进程已经启动
测试 hadoop 的运行
切换到 / apps/hadoop/share/hadoop/mapreduce 目录下
cd /apps/hadoop/share/hadoop/mapreduce
在该目录下跑一个 mapreduce 程序, 来检测一下 hadoop 是否能正常运行
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.4.5.jar pi 3 3
这个程序是计算数学中的 pi 值. 当然暂时先不用考虑数据的准确性.
当程序能计算出 Pi 的值, 说明 hadoop 已经安装配置完成.
来源: http://www.bubuko.com/infodetail-3212294.html