Hadoop - Hadoop部署

  Hadoop部署,部署方式:集群、单机部署(Standalone)、伪分布式。伪分布式是服务进程存在的,通常是1个节点,通常用于本机开发。单机部署是没有服务进程的,通常用户调用,才用jar包进驻到用户进程中(不实用)。

一、解压Hadoop

1、解压Hadoop 到 /home/hadoop/software中
tar -zxvf hadoop-2.8.1.tar.gz 
chown -R hadoop:hadoop ./hadoop-2.8.1
2、配置环境变量 ~/.bash_profile
#Hadoop
export HADOOP_HOME=/home/hadoop/software/hadoop-2.8.1
export PATH=$HADOOP_HOME/bin:$PATH
3、生效
source ~/.bash_profile
4、验证
hadoop version

二、Hadoop文件夹

  hadoop执行包解压以后有以下文件夹,及主要作用

bin     执行命令的shell,其中.cmd是windows下的指令
etc     配置文件夹
lib     库
sbin    启动关闭集群
share   jar包

三、HDFS伪分布式配置

3.1 配置通用属性

  修改/etc/hadoop/core-site.xml

1、添加HDFS对外提供服务的路径
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
</property>

  这里用了localhost,如果想对外提供服务,那就配置本机的host那么或者ip。

3.2 副本数配置

  修改etc/hadoop/hdfs-site.xml,因为是伪分布,所以副本数设置成1。

<property>
        <name>dfs.replication</name>
        <value>1</value>
</property>

3.3 配置环境变量

  修改etc/hadoop/hadoop-env.sh,添加Jdk的环境变量。

修改文档中的javahome路径
export JAVA_HOME=/usr/java/jdk1.8.0_45

3.4 SecondaryNameNode的配置

  如果这个不配,在如下启动的时候会 叫你填写0.0.0.0的ssh信任关系的yes,以确保本机对0.0.0.0的信任。如何才能避免,就是修改 etc/hadoop/hdfs-site.xml

<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>改成本地ip:50090</value>
</property>
<property>
        <name>dfs.namenode.secondary.https-address</name>
        <value>改成本地ip:50091</value>
</property>

3.5 从节点配置

echo "hadoop001" > slaves

3.6 设置temp目录

修改文件 core-site.xml
<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/hadoop/app/tmp</value>
</property>

3.6 设置dfs文件存放路径

修改文件 hdfs-site.xml
<property>
  <name>dfs.namenode.name.dir</name>
  <value>/home/hadoop/app/tmp/dfs/name</value>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>/home/hadoop/app/tmp/dfs/data</value>
</property>

四、启动HDFS伪分布式系统

4.1 启动前格式化

  如果是第一次启动,需要格式化整个文件系统。这里的第一次不是指系统启动后第一次,而是第一次用hdfs。

hdfs namenode -format

4.2 启动

  由于只讲/bin下的命令放置到全局,这个启动用到的是sbin文件夹下的指令,所以需要进入/sbin中去执行命令。

sbin/start-dfs.sh

4.3 检测

1、输入jps 看到
DataNode
SecondaryNameNode
NameNode

2、测试是否hdfs正常
   放一个文件到hdfs中
   hdfs dfs -put LICENSE.txt /
   查看是否在
   hdfs dfs -ls /

3、观察HDFS网页
http://localhost:50070/ 

4.4 停止

 sbin/stop-dfs.sh

五、重新部署HDFS伪分布式系统

  万一要重新部署,需要删掉之前的文件,然后再namenode格式化,然后再启动。

需要删除的文件路径 (${hadoop.tmp.dir}默认是在/tmp/hadoop-${user.name})
1、namenode目录
${hadoop.tmp.dir}/dfs/name
2、datanode目录
${hadoop.tmp.dir}/dfs/data
3、secondarynamenode目录
${hadoop.tmp.dir}/dfs/namesecondary
....
其实最终只要删除
${hadoop.tmp.dir}和/tmp/hsperfdata_${user.name}

六、HDFS伪分布式配置yarn

6.1 配置Mapreduce启动模式

  mapreduce本身就是hadoop组件,可以在yarn上部署,同时也来验证后面的yarn运行情况。在etc/hadoop/mapred-site.xml 配置

 <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
 </property>

6.2 配置yarn资源分配方式

  在etc/hadoop/yarn-site.xml配置

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

七、HDFS伪分布式启动yarn

7.1 启动yarn

sbin/start-yarn.sh

7.2 检测

1、输入jps 看到
resourceManager
nodemanager

2、打开网址
http://localhost:8088/

7.3 提交一个作业

···
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar pi 5 10
检测
1、命令输完后会显示 Running job: job_xxxx_0001 (扩展一下 xxx 其实是unix时间戳)
2、打开网页http://localhost:8088/ 看到有job在运行
···

八、开机自启hadoop

vi /etc/rc.local
最后增加一行
#Hadoop
su - hadoop -c "/home/hadoop/app/hadoop-2.8.1/sbin/start-all.sh"

扩展

jps

  jps是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java JVM进程的一些简单情况。不是所有的java进程都能用jps显示pid,只有符合接口的才可以。大数据组件都可以。
  jps有一个假死的问题,是出现 - process information unavailable问题后。
  1、真的死了,进程真的死了,2、假死了,进程没有死,进程还在工作。这两种怎么区分呢。先 ps -ef | grep xxx(pid) 看是否存在,如果不存在,可以去该/tmp/hsperfdata_xxx下删除和进程号相同的文件夹。那怎么知道是哪个用户下,就是说哪个xxx下,先 ll /tmp/hsperfdata_*,然后挨个找呗。如果存在进程,当前用户查看就是不可用,怎么办,就 ps -ef | grep xxx(pid) 第一列下就是该切换的用户,切换用户jps。

pid

  生产上有一些场景比较特殊,比如你一台机器可能部署两个hadoop,那这个时候就有些问题了,当你要杀死某一个datanode,发现ps下有多个datanode进程,怎么区分呢。其实在默认的/tmp/下有对应的文件存储对应程序的pid。名字叫hadoop-xxx-datanode.pid。
  生产上这个pid文件是不能放到/tmp里的,因为一个月后tmp会被清一次。需要更改环境变量${HADOOP_PID_DIR}。

猜你喜欢

转载自blog.csdn.net/myt0929/article/details/80383544