Hadoop搭建之伪分布式搭建

伪分布式搭建:所有的角色都安装在一台机器上,主要用于快速使用,模拟分布式场景。

参考网址:

https://www.cnblogs.com/jhxxb/p/10562460.html

https://www.cnblogs.com/qingyunzong/p/8496127.html#_label4_4

1.前提条件

(0)规划安装目录

主节点 nameNode resourceManager

从节点 dataNode nodeManager

(由于是一台虚拟机,没有设置secondaryNameNode)

规划安装目录:/opt/hadoop/apps

规划数据目录:/opt/hadoop/data

mkdir -p /opt/hadoop/apps
mkdir -p /opt/hadoop/data

(1)JDK

小贴士:/etc/profile是系统环境变量;~/.bashrc是个人环境变量(如果是普通用户,推荐配置)

#1.解压包
tar -zxvf  jdk-8u161-linux-x64.tar.gz -C /opt/hadoop/apps

#2.配置环境变量
vim ~/.bashrc

  export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161
  export PATH=$PATH:$JAVA_HOME/bin

  #3.使得环境变量生效

  source ~/.bashrc

  #4.验证

  java -version #如果显示为Linux自带OpenJdk(如下),需要先卸载

#[root@localhost apps]# java -version
#openjdk version "1.8.0_242"
#OpenJDK Runtime Environment (build 1.8.0_242-b08)
#OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

#参考网址:https://blog.csdn.net/qq_35535690/article/details/81976210

rpm -qa|grep java

rpm -e --nodeps java-1.7.0-openjdk-1.7.0.251-2.6.21.1.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.251-2.6.21.1.el7.x86_64
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64

(2)修改主机名和hosts文件

参考网址:https://blog.csdn.net/shmily_lsl/article/details/81164404

小贴士:

主机名hostname和/etc/hosts是不一样的,hostname主机名称hosts主机名和IP的映射关系,后者不能设置主机名。之所以有这样的错觉,是因为:

当主机名为localhost或者localhost.localdomain时(hostname命令可以查看主机名),系统会根据实际IP,去匹配hosts文件中的IP,将主机名设置为对应hosts里面的主机名。

例如:hostname为localhost,本机IP为192.168.56.100,当hosts文件设置 192.168.56.100 master时,我们看到的hostname就变成了master

第一步、修改主机名

cat /etc/redhat-release #查看操作系统版本

#1.操作系统是Centos6
#1.1永久生效,重启生效
vim /etc/sysconfig/network
NETWORKING=yes
GATEWAY=192.168.56.1
HOSTNAME=master #添加这一行      
#1.2临时生效
hostname
master
#2.操作系统是Centos7
hostnamectl set-hostname #会修改/etc/hostname 、/etc/machine-info 两个文件

# 参考网址 http://www.361way.com/centos7-hostnamectl/3816.html
#注意:不记得命令可以敲 hostnamectl --help

保险起见:1.1和2都执行一遍

第二步、修改hosts文件

vim /etc/hosts

192.168.56.100 master

(3)免密登录

参考网址:SSH原理  https://www.jianshu.com/p/33461b619d53

# 设置SSH远程登录免密,在ssh localhost本地免密登录中,既是客户端,又是服务端;客户端需要保留私钥,服务端需要保留公钥并命名为authorized_keys。
当客户端发起登录时,客户端将公钥发给服务端,服务端收到公钥后在authorized_keys中查找,如果找到,则会生产随机数R,用公钥对其加密,返回给客户端。
客户端收到后,用私钥解密。然后将解密得到的R和session_id用md5加密发送给服务端;服务端同样用md5对其进行(R,session_id)加密,如果得到的值相等,则可免密登录。
# ssh-keygen 用于生成公钥,私钥;公钥是由私钥产生,公钥用于加密和验签,私钥用于解密和签名
# rsa算法用于加密解密,数字签名,但是速度慢;dsa用于数字签名,签名和解密的速度快,加密和验签速度慢
cd ~/.ssh
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa #-t指定算法,默认为rsa -P指定私钥,一般不指定 -f指定生成的密钥,默认是id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys # 将公钥追加到authorized_keys中

(4)关闭防火墙

#永久关闭防火墙
systemctl disable firewalld
#临时关闭防火墙
systemctl stop firewalld
#注意:如果系统报错java.io.IOException: Got error, status message , ack with firstBadLink as 192.168.56.102:50010
#可能是由于没有关闭防火墙导致的,第一条命令不会及时生效,所以还需要第二条命令

1.搭建

(1)解压包并配置环境变量

#1.解压包
unzip hadoop-2.7.1.zip -d /opt/hadoop/apps
#2.配置环境变量
vim ~/.bashrc

  export HADOOP_HOME=/opt/hadoop/apps/hadoop-2.7.1
  export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

  #3.使得环境变量生效

  ~/.bashrc

(2)配置HDFS

A.修改hadoop-env.sh

export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161

B.修改core-site.xml

<configuration>
<property>
<!--指定HDFS中namenode的地址 -->
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<!--指定Hadoop运行时产生文件的目录 -->
  <name>hadoop.tmp.dir</name>
  <value>/opt/hadoop/data/hadoopdata/tmp</value>
</property>
</configuration>

C.修改hdfs-site.xml

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/opt/hadoop/data/namenode</value>
                <description>为了保证元数据的安全一般配置多个不同目录</description>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/opt/hadoop/data/datanode</value>
                <description>datanode 的数据存储目录</description>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
                <description>HDFS 的数据块的副本存储个数, 默认是3</description>
        </property>
        <property>
        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
        <value>true</value>
        <description>默认为true,namenode 连接 datanode 时会进行 host 解析查询;如果是false,则会按照IP进行解析</description>
        </property>
</configuration>

D.启动及验证

#如果命令没有执行权限,需要赋予执行的权限

chmod +x /opt/hadoop/apps/hadoop-2.7.1/bin/*

  chmod +x /opt/hadoop/apps/hadoop-2.7.1/sbin/*


# 第一次使用需要先格式化一次。之前若格式化过请先停止进程,然后删除文件再执行格式化操作 hdfs namenode -format # 启动 namenode hadoop-daemon.sh start namenode # 启动 datanode hadoop-daemon.sh start datanode # 验证,查看 jvm 进程 jps

4728 NameNode
4776 DataNode
4813 Jps

http://192.168.56.100:50070/dfshealth.html#tab-overview

(3)配置YARN

A.修改yarn-env.sh

# 配置 JDK 路径
# some Java parameters
export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161

B.修改yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
                <description>指定resourcemanager节点</description>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
                <description>YARN 集群为 MapReduce 程序提供的 shuffle 服务</description>
        </property>
</configuration>

C.启动及验证

# 启动 resourcemanager
yarn-daemon.sh start resourcemanager

# 启动 nodemanager
yarn-daemon.sh start nodemanager

# 查看 JVM 进程
jps

5875 ResourceManager
5925 NodeManager
5957 Jps
4728 NameNode
4776 DataNode

(4)配置MapReduce

A.修改mapred-env.sh

# 配置 JDK 路径
export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161

# when HADOOP_JOB_HISTORYSERVER_HEAPSIZE is not defined, set it.

B.修改mapred-site.xml

cp mapred-site.xml.template mapred-site.xml

<
configuration> <!-- 指定MR运行在YARN上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

C.启动及验证

运行一个mapreduce任务

#计算圆周率 表示2个map任务,每个任务生成10个点,点越多,计算结果越精确
hadoop jar /opt/hadoop/apps/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar pi 2 10
#注意如果是配置比较低(1G内存,8G硬盘)设置太大,内存不足,容易报错,

 

(5)配置JobHistory

mapred-site.xml

<configuration>
    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
    <property>
        <name>yarn.log.server.url</name>
        <value>http://master:19888/jobhistory/logs</value>
    </property>
</configuration>
# 启动 jobhistory
mr-jobhistory-daemon.sh start historyserver

# JVM 进程
jps
# 1995 NodeManager # 1781 DataNode # 4917 Jps # 1717 NameNode # 1935 ResourceManager # 4862 JobHistoryServer

浏览器访问 CentOS 的 IP 地址加端口号 (默认19888) 即可看到 web 端

 

(6)配置日志聚集

yarn-site.xml

<configuration>
    <!-- 开启日志聚集功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 设置日志保留时间(7天) -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
</configuration>
# 需要重启一遍服务
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop datanode
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager
mr-jobhistory-daemon.sh stop historyserver

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
mr-jobhistory-daemon.sh start historyserver

# 再运行一个任务,就可以看到详情
hadoop jar /opt/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar pi 10 100

查看刚刚运行的任务详情,未开启日志聚集之前运行的任务无法查看详情

 

 

日志聚集功能的应用场景:将日志保存到hdfs,为了防止程序运行完成后,不能查看日志,方便对运行中出现的错误,进行追踪和调试。 

参考网址:https://blog.csdn.net/qq_31923871/article/details/107022797?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-11&spm=1001.2101.3001.4242

 

 

爱人不亲,反其仁;治人不治,反其智;礼人不答,反其敬;行有不得,反求诸己
原文地址:https://www.cnblogs.com/lina-2015/p/14354473.html