文章目录
点击查看原文
单机本地部署Hadoop
-
下载安装JDK1.8
# 可以选择安装JDK1.8的某个版本,如 jdk-8u77-linux-x64.tar.gz # 解压到想要安装的目录,假设/opt/modules目录下 $ tar -zxvf jdk-8u77-linux-x64.tar.gz -C /opt/modules $ vim /etc/profile # 添加环境变量 export JAVA_HOME="/opt/modules/jdk1.8.0_77" export PATH=$JAVA_HOME/bin:$PATH $ source /etc/profile # 启用环境变量 $ java -version # 测试安装是否成功
-
下载&解压缩 Hadoop 到指定目录
# 1. 解压缩安装文件到期望的安装目录,假设/usr/local目录 $ tar –zxvf hadoop-2.10.0.tar.gz -C /usr/local $ cd /usr/local $ mv hadoop-2.10.0 hadoop $ chown -R usrname:usrgroup ./hadoop #若非root用户则需要 # 2. 检查 Hadoop是否可用 $ cd /usr/local/hadoop $ ./bin/hadoop version
-
Local 运行 Hadoop
Hadoop默认本地模式,无需进行配置即可运行。
$ cd /usr/local/hadoop $ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar # Hadoop 自带的例子程序 # 统计词频 $ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount README.txt output
伪分布部署 Hadoop
1. 按照单机本地部署Hadoop的步骤,完成本地Hadoop部署
下载安装 JDK 1.8
下载安装 Hadoop
以下假设 Hadoop 安装在 /usr/local/ 目录下。
2. 修改hadoop-env.sh(hadoop/etc/hadoop/目录下),配置其中的 JAVA_HOME 变量。
# vim hadoop-env.sh
......
export JAVA_HOME=【你的JDK安装目录】
3. 修改两个配置文件(hadoop/etc/hadoop/目录下)
$ vim core-site.xml
$ vim hdfs-site.xml
core-site.xml
hdfs-site.xml
4. 执行Namenode节点格式化
$ cd /usr/local/hadoop
$ ./bin/hdfs namenode –format #第一次启动时需要
5. 启动 Hadoop
$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh# jps 观察是否有如下进程:NameNode、DataNode和SecondaryNameNode
# 若有则成功启动Hadoop
# 可以使用Web界面查看HDFS信息,地址 http://localhost:50070
6. 执行 Hadoop 自带的应用程序,观察执行结果
上传文件到HDFS
$ cd /usr/local/hadoop
$ ./bin/hdfs dfs -mkdir /input #建立HDFS目录input
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml /input #上传本地文件到HDFS
$ ./bin/hdfs dfs -ls /input #查看input目录下的文件信息
执行自带程序
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input /output 'dfs[a-z.]+'
#运行Hadoop自带的grep程序,从所有文件中筛选出符合正则表达式 “dfs[a-z.]+” 的单词,
#并统计出现次数,最后把统计结果输出到“output”文件夹中。
$ ./bin/hdfs dfs -ls /output
$ ./bin/hdfs dfs -cat /output/part-r-00000
7. 使用Web界面查看HDFS信息
地址: http://localhost:50070。
8. 关闭 Hadoop
$ stop-dfs.sh
$ start-dfs.sh #重新启动 Hadoop
使用HDFS命令
查看命令使用方法
cd /usr/local/hadoop
./bin/hdfs dfs
可以在终端输入如下命令,查看hdfs dfs总共支持哪些操作:
./bin/hdfs dfs –help put
HDFS目录操作
1. 目录操作
-
在HDFS中为hadoop用户创建一个用户目录
需要注意的是,Hadoop系统安装好以后,第一次使用HDFS时,需要首先在HDFS中创建用户目录。本教程全部采用hadoop用户登录Linux系统,因此,需要在HDFS中为hadoop用户创建一个用户目录,命令如下:
./bin/hdfs dfs -mkdir -p /user/hadoop
该命令中表示在HDFS中创建一个
/user/hadoop
目录,–mkdir
是创建目录的操作,-p
表示如果是多级目录,则父目录和子目录一起创建,这里/user/hadoop
就是一个多级目录,因此必须使用参数-p
,否则会出错。 -
显示目录内容
/user/hadoop
目录就成为hadoop用户对应的用户目录,可以使用如下命令显示HDFS中与当前用户hadoop对应的用户目录下的内容:./bin/hdfs dfs -ls . # 该命令中,“-ls”表示列出HDFS某个目录下的所有内容,“.”表示HDFS中的当前用户目录
如果要列出HDFS上的所有目录,可以使用如下命令:
./bin/hdfs dfs -ls
-
在用户目录下和根目录下创建目录
下面,可以使用如下命令创建一个input目录:
./bin/hdfs dfs -mkdir input # 完整路径`/user/hadoop/input`
在创建个input目录时,采用了相对路径形式,实际上,这个input目录创建成功以后,它在HDFS中的完整路径是
/user/hadoop/input
。如果要在
HDFS的根目录
下创建一个名称为input的目录,则需要使用如下命令:./bin/hdfs dfs -mkdir /input # 完整路径`/input`
-
删除目录
可以使用
rm
命令删除一个目录
比如,可以使用如下命令删除刚才在HDFS中创建的/input
目录(不是/user/hadoop/input
目录):./bin/hdfs dfs -rm -r /input
上面命令中,
-r
参数表示如果删除/input
目录及其子目录下的所有内容,如果要删除的一个目录包含了子目录,则必须使用-r
参数,否则会执行失败。
HDFS文件操作
在实际应用中,经常需要从本地文件系统向HDFS中上传文件,或者把HDFS中的文件下载到本地文件系统中。
-
创建实例文件
首先,使用vim编辑器,在本地Linux文件系统的
/home/hadoop/
目录下创建一个文件myLocalFile.txt
,里面可以随意输入一些单词,比如,输入如下三行:Hadoop Spark XMU DBLAB
-
将本地文件上传至HDFS
然后,可以使用如下命令把本地文件系统的
home/hadoop/myLocalFile.txt
上传到HDFS中的当前用户目录的input目录下,也就是上传到HDFS的/user/hadoop/input/
目录下:./bin/hdfs dfs -put /home/hadoop/myLocalFile.txt input
可以使用ls命令
查看一下文件是否成功上传到HDFS中,具体如下:./bin/hdfs dfs –ls input
该命令执行后会显示类似如下的信息:
-
cat命令查看HDFS文件中内容
下面使用如下命令查看HDFS中的myLocalFile.txt这个文件的内容:
./bin/hdfs dfs –cat input/myLocalFile.txt
-
将HDFS中文件下载到本地
下面把HDFS中的
myLocalFile.txt
文件下载到本地文件系统中的/home/hadoop/下载/
这个目录下,命令如下:./bin/hdfs dfs -get input/myLocalFile.txt /home/hadoop/下载
可以使用ls命令,到本地文件系统查看下载下来的文件myLocalFile.txt:
-
从HDFS中的一个目录拷贝到HDFS中的另外一个目录。
比如,如果要把HDFS的
/user/hadoop/input/myLocalFile.txt
文件,拷贝到HDFS的另外一个目录/input
中(注意,这个input目录位于HDFS根目录下),可以使用如下命令:./bin/hdfs dfs -cp input/myLocalFile.txt /input
分布式部署Hadoop
准备集群环境
-
修改机器的hostname
sudo vim /etc/hostname
-
添加域名映射
sudo vim /etc/hosts
-
关闭防火墙(避免不必要的实验干扰)
-
安装 JDK
内容同前文单机本地部署Hadoop
-
配置 master 和 slave 之间的免密登录
master和slave之间账户密码通讯比较麻烦,采用公玥私玥免密登陆可以避免这种弊端。
方法就是在master端生成一个密钥对,然后将公玥发送给slave端,将来slave访问master的时候带上公玥即可验证自己的身份。ssh-keygen -t rsa # 回车 # 回车 # 回车 touch ~/.ssh/authorized_keys cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在master上部署Hadoop
假设 hadoop-2.10.1.tar.gz
内容同前文单机本地部署Hadoop
修改配置文件
-
修改slaves文件
-
修改core-site.xml文件
-
修改hdfs-site.xml文件
-
修改mapred-site.xml文件
-
修改yarn-site.xml文件
分发配置文件
在master节点上将配置好的Hadoop软件分发到集群其他节点上。
将本地文件夹复制拷贝到远程主机
scp -r 目录名 用户名@计算机IP或者计算机名称:远程路径
配置PATH环境变量
在master 和任何想要直接运行Hadoop命令的节点上配置PATH环境变量
vim /etc/profile # 编辑环境变量
source /etc/profile # 编辑后使更新生效
编辑内容
启动hadoop
# 删除之前Hadoop的遗留临时和日志文件(如果有的话)
rm -rf /usr/local/hadoop/tmp/*
rm -rf /usr/local/hadoop/logs/*
#首次启动Hadoop集群,必须在Master节点执行NameNode格式化
$ hdfs namenode -format
# 启动 HDFS、yarn、historyserver
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
#相应的停止命令就是把start换成stop,stop-dfs.sh/stop-yarn.sh/mr-jobhistory-daemon.sh stop historyserver
# jps 查看进程,观察启动是否成功,缺少任一进程都表示出错。
# Master节点:NameNode、SecondaryNameNode、JobHistoryServer、ResourceManager(yarn进程)
# Slave节点:DataNode、NodeManager(yarn进程)
Master节点
Slave节点
Web界面查看 Hadoop 集群
通过Web界面查看 Hadoop 集群状况
地址: http://node01:50070
运行 mapreduce 作业
# 上传数据到HDFS中
$ hdfs dfs -mkdir /input
$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml /input
#运行mapreduce作业
$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input /output 'dfs[a-z.]+’
# 查看作业运行的结果
$ hdfs dfs -ls /output
$ hdfs dfs -cat /output/part-r-00000
Web界面查看 YARN 集群
通过Web界面查看 YARN 集群的运行情况
http://node01:8088/cluster