Hadoop 安装
Posted moon__light
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop 安装相关的知识,希望对你有一定的参考价值。
1. 创建 hadoop 用户
(1) 添加新用户
sudo useradd -m hadoop -s /bin/bash
(2) 设置密码
sudo passwd hadoop
(3) 增加管理员权限
sudo adduser hadoop sudo
(4) 登录账户
su - hadoop
(5) 更新
sudo apt-get update
(6) 安装 SSH、配置 SSH 无密码登陆
- Ubuntu 默认已安装了 SSH client,需要安装 SSH server
sudo apt-get install openssh-server
- 在 hadoop 用户下,尝试用 ssh 登录本机,需要密码
ssh localhost
- 退出登录,生成密钥并加入到授权
cd ~/.ssh/ # 若没有该目录,请先执行一次 ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
- 再用 ssh localhost 登录,无需密码就可以登录了
2. 安装 Java (OpenJDK)
(1) Hadoop 2.7.3 要求 Java 7,可以使用 OpenJDK 或 Oracle JDK/JRE
https://wiki.apache.org/hadoop/HadoopJavaVersions
(2) OpenJDK 1.7 (Ubuntu 14)
sudo apt-get install openjdk-7-jre openjdk-7-jdk
(3) OpenJDK 1.7 (Ubuntu 16.04 的安装源已经默认没有 openjdk7)
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk (下载慢,可以换国内的源)
(4) 设置 Java
dpkg -L openjdk-7-jdk | grep ‘/bin/javac‘ ## JDK 路径
vim ~/.bashrc ## 添加 export JAVA_HOME=JDK路径
source ~/.bashrc
echo $JAVA_HOME
java -version
$JAVA_HOME/bin/java -version
3. 安装 Hadoop 2.7.3
(1) 下载
http://mirror.bit.edu.cn/apache/hadoop/common/ 或者
http://mirrors.cnnic.cn/apache/hadoop/common/
选择 stable 目录下的,一般有两个,一个是源代码,一个是编译好的,下载编译好
(2) 安装
sudo tar -zxf hadoop-2.7.3.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop
sudo chown -R hadoop ./hadoop
cd /usr/local/hadoop
./bin/hadoop version
(3) 在 ~/.bashrc 配置 PATH
PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
4. Hadoop 单机配置(非分布式)
(1) Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行
(2) 单机模式下使用的是本地文件系统,而不是 HDFS 文件系统 (hadoop fs 命令可用,但读写的是本地文件系统)
(3) 运行 Hadoop 附带的例子
cd /usr/local/hadoop
# 列出所有例子
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
# 运行 wordcount 例子,统计 NOTICE.txt,结果写到 output 文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount ./NOTICE.txt ./output
ll output # output 目录包括 part-r-00000 .part-r-00000.crc _SUCCESS ._SUCCESS.crc 四个文件
cat output/* # 可看到统计结果
rm -r ./output # Hadoop 默认不会覆盖结果文件,因此再次运行会出错,需要先将 ./output 删除
5. Hadoop 伪分布式配置
(1) Hadoop 可以在单节点上以伪分布式的方式运行
Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode
同时,读取的是 HDFS 中的文件
(2) Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,/usr/local/hadoop 是安装路径
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml
core-site.xml
hadoop.tmp.dir 临时文件夹,
指定后需将使用到的所有子级文件夹都要手动创建出来,否则无法正常启动服务,
要确保该地址是永久性的,不会因重启被清除
fs.defaultFS HDFS 文件系统的地址和端口号,就是 NameNode
=============
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>A base for other temporary directories</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<description>URI of HDFS NameNode</description>
</property>
</configuration>
hdfs-site.xml
dfs.replication 冗余数,默认 3,HDFS 将冗余存在不同节点上,单机版设为 1
dfs.namenode.name.dir 存放 namenode 的 name table(元数据),
以逗号分隔可以配多个路径,表示多个备份
dfs.datanode.data.dir 存放 datanode 的 数据块(数据块的默认最大值是 64M),
以逗号分隔可以配多个路径,表示数据块可以存放在多个路径下
=============
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
(3) 如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项
(4) 执行 NameNode 的格式化
cd /usr/local/hadoop
./bin/hdfs namenode -format
成功的话看到有
Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted
Exitting with status 0
(5) 开启 NameNode 和 DataNode 守护进程
cd /usr/local/hadoop
./sbin/start-dfs.sh
- 若出现 SSH 提示,输入 yes 即可
- 可能会出现
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。
该 WARN 提示可以忽略
- 如果出现 Could not resolve hostname,在 ./bashrc 配置
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
然后重新启动
(6) jps 来判断是否成功启动,若成功启动则会列出如下进程:NameNode,DataNode,SecondaryNameNode
(7) 成功启动后,可以访问 Web 界面查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件
http://localhost:50070
(8) 运行 Hadoop 附带的例子
hdfs dfs -mkdir -p /user/hadoop
hdfs dfs -mkdir input ## hadoop 用户下,并且已创建用户目录 /user/hadoop,
## 因此可以使用相对路径 input,绝对路径是 /user/hadoop/input
hadoop fs -put /usr/local/hadoop/NOTICE.txt input ## hadoop fs 等于 hdfs dfs
# 列出所有例子
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
# 运行 wordcount 例子,统计 NOTICE.txt,结果写到 output
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input/NOTICE.txt output
hadoop fs -cat output/*
hadoop fs -get output ./output
cat ./output/*
rm -rf ./output
hadoop fs -rm -r output
(9) 若要关闭 Hadoop,则运行
stop-dfs.sh
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 start-dfs.sh 就可以
6. 启动 YARN
(1) 不启用 YARN 也可以运行,YARN (也叫 MapReduce V2)
YARN 负责资源管理与任务调度,为集群在利用率、资源管理、可伸缩性、可靠性等方面带来了巨大好处
(2) 过配置文件 mapred-site.xml,yarn-site.xml 和命令 start-yarn.sh 启动 YARN
(3) mv /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
===============
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
/usr/local/hadoop/etc/hadoop/yarn-site.xml
yarn.nodemanager.aux-services: NodeManager 上运行的附属服务
yarn.log-aggregation-enable: 聚合日志(yarn logs -applicationId)
yarn.nodemanager.remote-app-log-dir: 日志上传目录
yarn.nodemanager.remote-app-log-dir-suffix: 结合日志上传目录日志被存在 /tmp/logs/${user}/logs
mapreduce.jobhistory.max-age-ms: /user/history/done 下日志的保存时间
yarn.log-aggregation.retain-seconds: /tmp/logs/${user}/logs 下日志的保存时间
yarn.log-aggregation.retain-check-interval-seconds: 多长时间检查一次日志,并将满足条件的删除
===============
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir-suffix</name>
<value>logs</value>
</property>
<property>
<name>mapreduce.jobhistory.max-age-ms</name>
<value>604800000</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property>
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
<value>21600</value>
</property>
</configuration>
# 正常来说添加了 JAVA_HOME 环境变量就可以提交 Job,但有时需要加到配置文件才行
/usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=JDK路径
(4) 启动 YARN
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在 Web 中查看任务运行情况
(5) jps 查看,可以看到多了 NodeManager,ResourceManager 和 JobHistoryServer
(6) 启动 YARN 后可以通过 Web 界面查看任务的运行情况
http://localhost:8088/cluster
(7) 运行 Hadoop 附带的例子
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input/NOTICE.txt output
hadoop fs -cat output/*
上 Web 界面查看任务的运行情况
伪分布式模式下,使用 YARN 反而更慢
(8) 关闭 YARN
stop-yarn.sh
mr-jobhistory-daemon.sh stop historyserver
(9) 如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template
否则在该配置文件存在,而未开启 YARN 的情况下,
运行程序会提示 Retrying connect to server: 0.0.0.0/0.0.0.0:8032 的错误
这也是为何该配置文件初始文件名为 mapred-site.xml.template
7. 集群配置
(1) 将上面配置好的虚拟机作为 Master
(2) 关闭 Master 的 Hadoop
mr-jobhistory-daemon.sh stop historyserver
stop-yarn.sh
stop-dfs.sh
(3) 安装新的虚拟机作为 Slave
(4) 在 Slave 节点上配置 hadoop 用户、安装 SSH server、配置无密码登录、安装 Java 环境
(5) 网络配置
a. 将虚拟机(VirtualBox)的网络连接方式改为桥接 (Bridge) 模式,配置好后要验证网络连接正常
Settings -> Network -> Adapter 1:
Attached to 选 Bridged Adapter,Advanced -> MAC Address 确保各节点地址不同
b. 修改各节点的主机名
sudo vim /etc/hostname ## 改为 Master 和 Slave1
c. 修改各节点的 IP 映射
ifconfig -a ## 查看各节点的 IP
sudo vim /etc/hosts ## 添加以下内容
192.168.1.107 Master
192.168.1.106 Slave1
d. 重启
e. 确保主机名修改成功,并且能 ping 通对方
ping Master -c 3 ## 只 ping 3次,否则要按 Ctrl+C 中断
ping Slave1 -c 3
f. 配置 SSH 无密码登录,让 Master 节点可以无密码 SSH 登陆到各个 Slave 节点上
Master 中执行
cd ~/.ssh # 如没该目录,先执行 ssh localhost
rm ./id_rsa* # 删除之前生成的公匙
ssh-keygen -t rsa # 一直按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 无密码 SSH 本机
ssh Master 验证一下不需要密码 # 第一次需要输入 Yes
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ # 将公匙传输到 Slave 节点
Slave 中执行
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
在 Master 节点上验证可无密码 SSH 到各个 Slave 节点
ssh Slave1
(6) 配置集群/分布式环境
a. 在 Master 上修改 5 个配置文件:
slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
http://hadoop.apache.org/docs/stable/ ## 左边栏有各种文档,和各个配置文件的说明
/usr/local/hadoop/etc/hadoop/slaves
将作为 DataNode 的主机名写入该文件,每行一个
默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode
分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用
这里仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,添加内容:Slave1
/usr/local/hadoop/etc/hadoop/core-site.xml
===============
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
/usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
/usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
/usr/local/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir-suffix</name>
<value>logs</value>
</property>
<property>
<name>mapreduce.jobhistory.max-age-ms</name>
<value>604800000</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property>
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
<value>21600</value>
</property>
</configuration>
b. 将 Master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。
因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件
在 Master 执行
cd /usr/local
sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/* # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在 Slave 执行
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
在 ~/.bashrc 配置PATH
PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
source ~/.bashrc
c. 启动
在 Master 上执行
hdfs namenode -format
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
通过命令 jps
在 Master 上可以看到
NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程
在 Slave 上可以看到
DataNode 和 NodeManager 进程
缺少任一进程都表示出错
在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,
如果 Live datanodes 不为 0 ,则说明集群启动成功
d. 通过 Web 页面看到查看 DataNode 和 NameNode 的状态
http://master:50070/
(7) 运行 Hadoop 附带的例子 (在哪个节点执行都可以)
hdfs dfs -mkdir -p /user/hadoop
hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/NOTICE.txt input
# 列出所有例子
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
# 运行 wordcount 例子,统计 NOTICE.txt,结果写到 output
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input/NOTICE.txt output
hdfs dfs -cat output/*
hdfs dfs -get output ./output
cat ./output/*
rm -rf ./output
hdfs dfs -rm -r output
可以通过 Web 界面查看任务进度
http://master:8088/cluster
(8) 关闭 Hadoop 集群也是在 Master 节点上执行的
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
(9) 此外,同伪分布式一样,也可以不启动 YARN,但要记得改掉 mapred-site.xml 的文件名
以上是关于Hadoop 安装的主要内容,如果未能解决你的问题,请参考以下文章
如何从开源 Hadoop 构建 deb/rpm 存储库或由 ambari 安装的公开可用的 HDP 源代码
Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段