Hadoop模块
1.hadoop common ——公共模块,支持其他模块
hadoop-common-xxx.jar
core-site.xml
core-default.xml
2.HDFS ——分布式文件系统
HDFS:NameNode+DataNode+SecondaryNameNode
hdfs-site.xml
hdfs-default.xml
3.Hadoop YARN ——作业调度和资源管理框架
YARN:ResourceManager(资源管理器)+NodeManager(节点管理器)
yarn-site.xml
yarn-default.xml
4.Hadoop MapReduce ——基于yarn系统的大数据集并行处理技术
mapred-site.xml
mapred-default.xml
一 独立模式(没有守护进程,所有程序运行在同一JVM中,利于test和debug)
1.下载hadoop的tar包(包括源包和二进制包)到宿主机和虚拟机共享的文件夹
2.tar开hadoop文件,移动到/soft文件夹下
3.创建hadoop链接
4.配置环境变量
系统级环境变量在 /etc 中的environment文件里,进入编辑界面
5. 立刻生效
6.测试安装是否成功
hadoop version
独立模式没有守护进程,所有程序运行在同一JVM中,利于test和debug
查看文件系统
$ hadoop fs -ls /
二 伪分布模式
1.[ 配置文件${hadoop_home}/etc/hadoop/*-site.xml ]
core-site.xml
hdfs-site.xml
mapreduce-site.xml
yarn-site.xml
如上是hdfs-site.xml的默认内容,<!-- -->内的都是注释
<?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- mapred-site.xml -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- yarn-site.xml -->
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.配置SSH
1) 首先查询软件包
$sudo apt-cache search ssh | grep ssh
2) 安装SSH
$ sudo apt-get install ssh
通过以上命令实际安装了两个软件:sshd(服务端)和ssh(客户端)
查看进程会发现有了ssh
用ssh localhost启动
但是每次登陆都需要密码
3) 配置秘钥
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa //-t指的是算法,用rsa算法;-P指的是密码,' '指的是无密码;-f指的是生成id_rsa秘钥文件
id_rsa是私钥,id_rsa.pub是公钥
然后追加公钥到对方的认证库中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后就可以不需要密码了
此时相当于进入了远程机的shell界面进行操作,exit然后退回到本机操作界面
3.格式化HDFS文件系统
HDFS在第一次使用前必须要格式化,直接输入以下命令即可
$ hdfs namenode -format
4.启动和终止守护进程
启动HDFS守护进程:
$ start-dfs.sh
(这里来一个插曲,由于系统是32位,hadoop官网下载的包是64位,因此运行会出现warn,详情以及解决办法见https://cloud.tencent.com/developer/article/1010750)
启动yarn守护进程:
$ start-yarn.sh
启动MapReduce守护进程:
$ mr-jobhistory-daemon.sh start historyserver
或者直接
$ start-all.sh
jps查看进程
(再来一个插曲,有次查看进程发现没有NameNode进程,此时需要格式化NameNode ,节点信息可以在/tmp/hadoop-ubuntu/dfs中查看,但此方法每次开启hadoop都需要格式化NameNode,还可以将/tmp/hadoop-ubuntu/dfs/data/current 中的VERSION文件里的 clusterID值与/tmp/hadoop-ubuntu/dfs/name/current 中VERSION 文件里的 clusterID的值保持相同即可)
$ hadoop namenode -format
关闭守护进程:
$ mr-jobhistory-daemon.sh stop historyserver
$ stop-yarn.sh
$ stop-dfs.sh
还可以采用绝对路径指向配置目录
$ start-dfs.sh --config path-to-config-directory
$ start-yarn.sh --config path-to-config-directory
$ start-all.sh --config path-to-config-directory
还可通过设置环境变量HADOOP_CONF_DIR
$ export HADOOP_CONF_DIR=/soft/hadoop/etc/hadoop ...
为了使同一台机器上有多种配置模式,将原来 /soft/hadoop/etc/hadoop 改为 /soft/hadoop/etc/hadoop_local(hadoop_local中的core-site-xml,hdfs-site-xml,mapreduce-site.xml,yarn-site.xml没有配置信息)和/soft/hadoop/etc/hadoop_pseudo,用哪种模式就给哪种模式建立一个hadoop链接。下图为使用伪分布模式。
5.创建用户目录
$ hadoop fs -mkdir /test
$ hadoop fs -ls / ——查看hadoop文件系统根目录
$ hadoop fs -ls -R / ——递归显示目录结构
$ hadoop fs -lsr / ——同上
浏览器登陆 http://localhost:50070/,localhost:8088 可查看文件信息
6.存放文件
$ hadoop fs -put a.txt /test
将a.txt放入hadoop文件系统的test目录
进入如下目录,blk_1073741825文件的12表示有12个字节
7.查看日志
可进入 /soft/hadoop/logs 查看其中的 *.log文件来查看各节点的日志
也可进入网站 :
http://localhost:50070/ 查看名称节点 Windows下浏览器进入192.168.75.130:50070/ 查看
http://localhost:8088/ 查看资源管理器 Windows下浏览器进入192.168.75.130:8088/ 查看
http://localhost:19888/ 查看历史服务器 Windows下浏览器进入192.168.75.130:19888/ 查看
hdfs://namenode:8020/ 远程过程调用 (name rpc)
如下,查看监听端口号会发现有50070 8088等
三.完全分布模式
NameNode:目录、类型、权限等元数据
SecondaryNameNode:辅助名称节点,防止NameNode丢失
DataNode:存放真实数据
在Hadoop中:
HDFS:NameNode+DataNode+SecondaryNameNode
YARN:ResourceManager(资源管理器)+NodeManager(节点管理器)
因此一般情况下ResourceManager(资源管理器)放在NameNode上,NodeManager(节点管理器)放在DataNode上
所以在NameNode主机上有两个进程:NameNode+ResourceManager
在DataNode主机上有两个进程:DataNode+NodeManager
如上图,在/soft/hadoop/etc/hadoop下的文件中,hadoop-env.sh ,mapred-env.sh ,yarn-env.sh 是环境变量的信息
slaves文件表示有哪些主机来运行数据节点,在伪分布模式下slaves文件中只有localhost,如下
1.克隆虚拟机4台
2.拷贝hadoop完全分布式包
3.配置hadoop配置文件
<?xml version="1.0"?>
<!-- core-site.xml -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode/</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- mapred-site.xml -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<?xml version="1.0"?>
<!-- yarn-site.xml -->
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>namenode</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
然后将三个数据节点的主机名称配置到slaves中,每个节点占一行
<!-- slaves -->
ubuntu1
ubuntu2
ubuntu3
4.远程复制 /etc/hosts 文件到其他主机
进入hosts文件添加如下内容,这样在 ping 时可直接ping 主机名而不需要写IP地址
然后将hosts文件远程拷贝到其他主机
# scp root@ubuntucp:/etc/hosts root@ubuntu1:/etc
5.配置ssh无密登陆
在ubuntu下进入 ~/.ssh
因为其余四台是拷贝的,所以~/.ssh中的id_rsa.pub是一样的,需要在其余四台虚拟机下删除~/.ssh中的文件,然后重新生成
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
接着把 ~/.ssh/id_rsa.pub 远程拷贝到其余四台主机
$ scp id_rsa.pub ubuntu@ubuntu1:~/.ssh/id_rsa.pub.ubuntucp
然后在其余主机上可以发现有了 id_rsa.pub.ubuntucp,如下
接着将id_rsa.pub.ubuntucp追加到其余四台的秘钥库中
cat ~/.ssh/id_rsa.pub.ubuntucp >> ~/.ssh/authorized_keys
然后在最开始的主机上就可以无密登陆其余四台主机了
6.远程拷贝配置好的hadoop包到其他主机
$ scp -r hadoop_cluster/ ubuntu@ubuntu1:/soft/hadoop/etc/
-r 是递归复制
1)格式化HDFS
$ hdfs --config /soft/hadoop/etc/hadoop_cluster namenode -format
成功后在/tmp目录下可以找到name文件夹
2)启动HDFS
$ start-dfs.sh --config /soft/hadoop/etc/hadoop_cluster
或者创建hadoop_cluster的链接hadoop,然后
$ start-dfs.sh
3)启动yarn
$ start-yarn.sh --config /soft/hadoop/etc/hadoop_cluster
或者创建hadoop_cluster的链接hadoop,然后
$ start-yarn.sh
7.配置辅助名称节点(具体请点击)
打开 hdfs-default.xml ,复制里面的secondarynamenode 配置信息
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>0.0.0.0:50090</value>
<description>
The secondary namenode http server address and port.
</description>
</property>
粘到 /soft/hadoop/etc/hadoop/hdfs-site.xml 中,并把value值0.0.0.0 改为 ubuntu4。
然后把修改过的hdfs-site.xml 发给所有主机
用getconf命令查看辅助名称节点
最后格式化namenode,重新开启后
八.存放目录修改
由于hadoop存放目录默认在 /tmp 目录下,每次开机都清空了,所以要修改存放路径
在 /soft/hadoop/etc/hadoop 中修改 core-site.xml文件,添加
<property>
<name>hadoop.tmp.dir</name>
<value>/home/ubuntu/hadoop</value>
</property>
然后发给其他主,接着格式化namenode,开启