大数据基础(2)Hadoop\HDFS\YARN搭建部署与简易使用教程
一、Hadoop下载与安装
1、通过Apache官方网站可以下载Hadoop的二进制安装包,无需编译,解压即用
wget https://downloads.apache.org/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz tar hadoop-2.10.1.tar.gz mv hadoop-2.10.1 /usr/local/ ln -s /usr/local/hadoop-2.10.1 /usr/local/hadoop
2、为Hadoop配置环境变量
vi /etc/proflie JAVA_HOME=/usr/local/jdk HADOOP_HOME=/usr/local/hadoop PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH source /etc/profile
3、还需在Hadoop环境配置文件中做以下配置,否则会遇到JAVA_HOME is not set and could not be found的错误
vi /usr/local/hadoop-2.10.1/etc/hadoop/hadoop-env.sh export JAVA_HOME=/usr/local/jdk1.8.0
4、验证配置
hadoop version
5、Hadoop主要配置文件有4个,都在$HADOOP_HOME/etc/hadoop下,关于配置文件的默认配置项,可以通过解压jar包后从xxx-default.xml文件中查询,比如/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.10.1.jar里就有hdfs-default.xml配置文件,里面有hdfs具体配置项和默认配置信息:
· core-site.xml(配置通用属性)
· hdfs-site.xml(配置HDFS)
· mapred-site.xml(配置MapReduce)
· yarn-site.xml(配置yarn)
二、Hadoop本地模式(只需1个节点)
Hadoop在安装后默认就是本地模式,无后台进程,可以直接通过命令运行测试,该模式通常用于开发阶段的调试。如下示例就是使用hadoop的测试jar包的grep方法遍历/data/hadoop/input目录,以''中的正则作为过滤规则将结果输出到/data/hadoop/output目录(该目录不用提前创建,如果该目录存在运行会失败),由于是本地模式,文件不用上传到HDFS中,运行完毕后如果output目录存在_SUCCESS文件则代表运行成功
1、本地模式grep方法
hadoop fs -ls #查看hadoop文件系统,命令格式和Linux差不多,由于这里是独立本机模式,所以看到的文件也都是本机的文件了 cp -a /usr/local/hadoop-2.10.1/etc/hadoop/* /data/hadoop/input/ #复制一些文件用于测试 hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar grep /data/hadoop/input /data/hadoop/output 'dfs[a-z]+'
2、本地模式wordcount方法
hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hadoop/wordcount_in /data/hadoop/wordcount_out
三、Hadoop+HDFS 伪分布模式(只需1个节点)
以守护进程方式运行在本地机器上,模拟小规模集群
1、配置伪分布式HDFS
#编辑hadoop-env.sh,增加以下内容 export JAVA_HOME=/usr/local/jdk #编辑core-site.xml,增加以下内容 <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000/</value> #指定HDFS NameNode地址 </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop/data/tmp</value> #指定HDFS临时文件存储路径,如果该路径发生变化,后续启动HDFS时要删除log和data目录并重新初始化才行 </property> </configuration> #编辑hdfs-site.xml,增加以下内容 <configuration> <property> <name>dfs.replication</name> <value>1</value> #配置HDFS副本数量,集群模式下这里是3,由于是模拟环境,只有1台机器 </property> <property> <name>dfs.permissions.enabled</name> #关闭HDFS权限检查,否则必须进行授权操作才可以上传 <value>false</value> </property> </configuration>
2、第一次启动HDFS前需要进行格式化,关注命令执行后的successfully
hdfs namenode -format
3、启动HDFS的namenode和datanode
hadoop-daemon.sh start namenode hadoop-daemon.sh start datanode hadoop-daemon.sh stop datanode #停止HDFS顺序要注意先停止datanode hadoop-daemon.sh stop namenode #停止HDFS
4、使用jps可以验证服务,正常情况下可以看到NameNode和DataNode的信息,并且按照配置文件所指定的相关目录自动创建了data目录,logs则是在Hadoop的安装目录下
jps ll /usr/local/hadoop/logs/ #生成了datanode和namenode日志 ll /data/hadoop/data/tmp/dfs/ #生成了存放元数据的name目录和存放数据的data目录
5、通过HDFS命令行上传文件到HDFS
hadoop fs -put /etc/fstab / #上传文件到HDFS hdfs dfs -mkdir -p /data/hdfs/input #通过hdfs命令创建目录到HDFS hdfs dfs -put /data/mysql3306/log /data/hdfs/input #通过hdfs命令上传目录到HDFS
6、通过HDFS命令行查看文件
hdfs dfs -ls /data/hdfs/input hdfs dfs -cat /data/hdfs/input/error.log
7、访问HDFS WEB页面,端口为50070,进入Utilities可以看到上传的文件。这里有个Block Size需要注意,默认每个块为128M,如果上传的文件大于它,通过查看文件可以看到会被分成多个Block进行存放,而如果文件没有大于它,在硬盘中实际存储的大小和文件本身一样,只是显示上依然为128M
8、使用hadoop的wordcount对HDFS中的文件进行处理
hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hdfs/input/log /data/hdfs/output
9、查看和下载处理后的文件
hdfs dfs -cat /data/hdfs/output/part-r-00000
hdfs dfs -get /data/hdfs/output/part-r-00000
10、删除无用文件
hdfs dfs -rmr /data/hdfs/output
四、Hadoop+HDFS+Yarn 伪分布模式(只需1个节点)
1、配置Yarn
#配置环境变量 vi yarn-env.sh export JAVA_HOME=/usr/local/jdk #配置yarn vi yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> #map reducer获取数据的方式 <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> #配置YARN的ResourceManager地址 <value>node1</value> </property> <property> <name>yarn.resourcemanager.nodes.include-path</name> #伪分布式配置dnrm信息 <value>/usr/local/hadoop-2.10.1/etc/hadoop/dnrm</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> #配置YARN使用的最大内存 <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> #配置YARN使用的CPU核数 <value>8</value> </configuration> #配置mapred环境变量 vi mapred-env.sh export JAVA_HOME=/usr/local/jdk #编辑mapred-site.xml,增加以下内容 cp mapred-site.xml.template mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
2、创建dnrm文件
vi /usr/local/hadoop-2.10.1/etc/hadoop/dnrm
node1 #做好hosts解析
3、启动yarn
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
jps
4、运行任务进行测试,现在任务将使用yarn进行资源调度
hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hdfs/input/log /data/hdfs/output
5、通过Web访问Yarn可以看到正在运行的任务和进度情况,通过Web访问IP:8088/cluster可以看到hadoop任务的进度
6、通过Web访问Yarn后可以看到在进度条旁边有个history按钮,但是这个是需要配置了历史服务才能访问的,否则是404错误,history服务配置方式如下
#编辑mapred-site.xml,增加以下内容 cp mapred-site.xml.template mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> #配置job history server地址 <value>node1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> #配置job history server web ui地址 <value>node1:19888</value> </property> </configuration>
7、启动job history历史服务
mr-jobhistory-daemon.sh start historyserver
jps
8、历史服务成功启动后,后续有任务完成后都可以通过history按钮查看任务情况了,也可以通过ip:19888端口直接访问history服务
五、全分布模式:至少需要3台机器,节点之间需要配置好SSH免密登录,每个节点都做相同配置,由于NodeManager、ResourceManager、SecondaryNameNode都比较消耗资源,建议分开部署
1、配置hadoop模块
#编辑/usr/local/hadoop/etc/hadoop/hadoop-env.sh,增加以下内容 export JAVA_HOME=/usr/local/jdk #编辑/usr/local/hadoop/etc/hadoop/core-site.xml,增加以下内容 <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000/</value> #指定HDFS NameNode地址 </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop/data/tmp</value> #指定HDFS临时文件存储路径,如果该路径发生变化,后续启动HDFS时要删除log和data目录并重新初始化才行 </property> </configuration>
2、配置hdfs模块
#编辑hdfs-site.xml,增加以下内容 vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>3</value> #配置HDFS副本数量,当文件有多个副本后将会在每个节点上都保存一份 </property> <property> <name>dfs.permissions.enabled</name> #关闭HDFS检查 <value>false</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> #指定secondary节点地址 <value>node3:50090</value> </property> </configuration>
2、配置slave
vi /usr/local/hadoop/etc/hadoop/slaves node1 node2 node3
3、配置Yarn模块,去掉之前的DNRM配置
vi /usr/local/hadoop/etc/hadoop/yarn-env.sh export JAVA_HOME=/usr/local/jdk #配置yarn vi /usr/local/hadoop/etc/hadoop/yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> #map reducer获取数据的方式 <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> #配置YARN的ResourceManager地址 <value>node1</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> #配置YARN使用的最大内存 <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> #配置YARN使用的CPU核数 <value>8</value> </property> <property> <name>yarn.log-aggregation-enable</name> #开启日志收集 <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> #日志保留时长为7天 <value>604800</value> </property> <property> <name>yarn.log-aggregation.retain-check-interval-seconds</name> #日志检查时间为1天 <value>86400</value> </property> </configuration>
4、mapreduce文件和伪分布式基本一致
vi /usr/local/hadoop/etc/hadoop/mapred-env.sh export JAVA_HOME=/usr/local/jdk #编辑mapred-site.xml,增加以下内容 cp /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> <property> <name>mapreduce.jobhistory.address</name> #配置job history server地址 <value>node1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> #配置job history server web ui地址 <value>node1:19888</value> </property> </configuration>
5、在HDFS NameNode进行格式化并启动HDFS,如果有节点未正常启动,大概率是因为之前环境遗留下来的目录没有清理干净,建议全部删掉
hdfs namenode -format # hadoop-daemon.sh start namenode #伪分布式使用的是该命令管理nodename,分布式下推荐使用start-dfs.sh脚本 start-dfs.sh #会启动所有节点的namenode、datanode
6、在Yarn ResourceManager节点启动Yarn
start-yarn.sh
7、在各个节点是否启动成功,由于这里把NameNode和ResourceManager都部署在了一个节点上,所以该节点会存在4个服务,其他节点则是启动DataNode和NodeManager
8、进行任务测试
hdfs dfs -put /usr/local/hadoop/etc/hadoop /data/hdfs/data/input/ hadoop jar /usr/local/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /data/hdfs/data/input/hadoop /data/hdfs/data/output
9、日志收集配置。由于分布式系统,日志必然是存在不同节点中,为了方便统一管理,可以配置Yarn的日志聚集
#配置yarn vi yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> #map reducer获取数据的方式 <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> #配置YARN的ResourceManager地址 <value>node1</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> #配置YARN使用的最大内存 <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> #配置YARN使用的CPU核数 <value>8</value> </property> <property> <name>yarn.log-aggregation-enable</name> #开启日志收集 <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> #日志保留时长为7天 <value>604800</value> </property> <property> <name>yarn.log-aggregation.retain-check-interval-seconds</name> #日志检查时间为1天 <value>86400</value> </property> </configuration>
12、重启nodemanager、resourcemanager、historyserver
mr-jobhistory-daemon.sh stop historyserver yarn-daemon.sh stop resourcemanager yarn-daemon.sh stop nodemanager yarn-daemon.sh start nodemanager yarn-daemon.sh start resourcemanager mr-jobhistory-daemon.sh start historyserver
13、访问history的Web界面(ip:19888)查看统一日志,这些日志都会上传到HDFS中,也可以通过HDFS看到
评论