更新:
现在分享一个完全分布式的链接博客,
http://blog.51cto.com/balich/2062052
感谢这位大神!
-----------------------------------------------------------------------------------
伪分布式:
参考链接:http://gitbook.cn/books/5954c9600326c7705af8a92a/index.html
http://blog.csdn.net/hliq5399/article/details/78193113
十分感谢!
下面开始:
本次安装系统环境为:
VMware虚拟机安装centos7.3 linux系统
java JDK1.8(自行百度安装一下就好了)
root用户
亲测可用
1.下载解压hadoop安装包
下载地址:http://hadoop.apache.org/releases.html
这里选择2.8.3 binary 二进制包文件,原因是已经编译好了,只需要下载下来解压进行了,不需要再编译安装了
2.创建存放hadoop文件的目录
$ sudo mkdir /opt/modules
这里我们选择 /opt/modules/目录作为hadoop文件的存放目录,所以将下载好的hadoop binary二进制包解压到/opt/modules/目录下 (解压后的名字为hadoop-2.8.3/)
$ tar -zxvf hadoop-2.8.3.tar.gz
3.配置Hadoop
a>配置Hadoop环境变量
$ vim /etc/profile
在profile配置文件里最下面追加配置:
export HADOOP_HOME="/opt/modules/hadoop-2.8.3"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存退出之后执行$ source /etc/profile 使得配置生效
验证HADOOP_HOME参数:
终端运行命令$ echo $HADOOP_HOME
b>配置hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME参数
进入hadoop的文件目录,我的是:/opt/moudles/hadoop-2.8.3/
所以: $ cd /opt/moudles/hadoop-2.8.3/
然后 vim /etc/hadoop/hadoop-env.sh
修改JAVA_HOME参数为:
export JAVA_HOME="XXXXX"(为java_home的路径,如果不知道可以执行echo $JAVA_HOME命令查看)
...mapred-env.sh yarn-env.sh文件的JAVA_HOME参数也是按照上面的步骤配置修改
c>修改core-site.xml
文件目录为/opt/modules/hadoop-2.8.3/etc/hadoop/, 配置文件都在这个目录下
在configutation标签里添加如下配置
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.31.128:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
(1) fs.defaultFS参数配置的是HDFS的地址
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.31.128:8020</value>
</property>
(2) hadoop.tmp.dir 配置的是hadoop的临时目录,比如HDFS的NameNode数据默认都存放在这个目录下,查看*-default.xml等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir}的配置。原来hadoop.tmp.dir是在/tmp/hadoop-${user.name},如果操作系统重启了,那么NameNode存在这个目录下的HDFS0的元数据就会被清除,(tmp是linux 的临时目录,重启会自动清除这个目录下的所有数据),所以我们要修改这个路径。
配置放进去之后,就开始创建刚才的/opt/data/tmp/临时目录,虽然配置了这个目录,但是这个目录是我们自己定义的还不存在,所以要创建它。
4. 格式化HDFS
$ hdfs namenode –format
hdfs命令在hadoop-2.8.3/bin/目录下
格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中。
格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功。
5.启动NameNode
$ /hadoop-2.8.3/sbin/hadoop-daemon.sh start namenode
6.启动DataNode
$ /hadoop-2.8.3/sbin/hadoop-daemon.sh start dataname
7.启动SecondaryNameNode
$ /hadoop-2.8.3/sbin/hadoop-daemon.sh start secondarynamenode
8. jps命令查看是否已经启动成功,有结果就是启动成功了。
[root@xxx hadoop-2.8.3]$ jps
3034 NameNode
3233 Jps
3193 SecondaryNameNode
3110 DataNode
9. HDFS上创建目录,
[root@xxx hadoop-2.8.3]$ /bin/hdfs dfs -mkdir /demol
10. 上传本地文件到HDFS上
[root@xxx hadoop-2.8.3]$ /bin/hdfs dfs -put /root/hadoop/a.txt /demol
11.读取HDFS上的文件
[root@xxx hadoop-2.8.3]$ /bin/hdfs dfs -cat /demol/a.txt
12. 从HDFS上下载文件到本地
[root@xxx hadoop-2.8.3]$ /bin/hdfs dfs -get /demol/a.txt /root/hadoop/
13. 配置启动YARN
1、 配置mapred-site.xml
默认没有mapred-site.xml文件,但是有个mapred-site.xml.template配置模板文件。复制模板生成mapred-site.xml。
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
添加如下配置: 指定mapreduce运行在yarn框架上。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2、 配置yarn-site.xml
添加配置如下:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.31.128</value>
</property>
yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。
3. 启动Resourcemanager
$ /hadoop-2.8.3/sbin/yarn-daemon.sh start resourcemanager
4.启动nodemanager
$ /hadoop-2.8.3/sbin/hadoop-daemon.sh start nodemanager
5. jps查看是否启动成功
[root@xxx hadoop-2.8.3]$ jps
3034 NameNode
4439 NodeManager
4197 ResourceManager
4543 Jps
3193 SecondaryNameNode
3110 DataNode
可以看到ResourceManager、NodeManager已经启动成功了。
6、 YARN的Web页面
YARN的Web客户端端口号是8088,通过http://192.168.100.10:8088/可以查看。
在Hadoop的share目录里,自带了一些jar包,里面带有一些mapreduce实例小例子,位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar,可以运行这些例子体验刚搭建好的Hadoop平台,我们这里来运行最经典的WordCount实例。
1.创建测试用的Input文件
a>创建输入目录
bin/hdfs dfs -mkdir -p /wordcountdemo/input
b>创建原始文件
在本地/opt/data目录创建一个文件wc.input,内容如下
c. 将wc.input文件上传到HDFS的/wordcountdemo/input目录中:
bin/hdfs dfs -put /opt/data/wc.input /wordcountdemo/input
2、 运行WordCount MapReduce Job
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-
2.8.3.jar wordcount /wordcountdemo/input /wordcountdemo/output
3. 查看输出目录结果
bin/hdfs dfs -ls /wordcountdemo/output
output目录中有两个文件,_SUCCESS文件是空文件,有这个文件说明Job执行成功。
part-r-00000文件是结果文件,其中-r-说明这个文件是Reduce阶段产生的结果,mapreduce程序执行时,可以没有reduce阶段,但是肯定会有map阶段,如果没有reduce阶段这个地方有是-m-。
一个reduce会产生一个part-r-开头的文件。
查看输出文件内容。
[root@xxx hadoop-2.8.3]$ bin/hdfs dfs -cat /wordcountdemo/output/part-r-00000
hadoop 3
hbase 1
hive 2
mapreduce 1
spark 2
sqoop 1
storm 1
结果是按照键值排好序的。
十九、停止Hadoop
[root@xxx hadoop-2.8.3]$ sbin/hadoop-daemon.sh stop namenode
stopping namenode
[root@xxx hadoop-2.8.3]$ sbin/hadoop-daemon.sh stop datanode
stopping datanode
[root@xxx hadoop-2.8.3]$ sbin/yarn-daemon.sh stop resourcemanager
stopping resourcemanager
[root@xxx hadoop-2.8.3]$ sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager