20200909_hadoop基础学习笔记

 

操作系统 centos 7
hadoop: hadoop-2.10.1

 

一、环境配置
1.ip地址确定,修改文件;  建议前期安装网络查看工具 yum -y install net-tools    (可以生成ifconfig命令,netstat命令)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=238b3ec3-abc6-4f37-8750-9a157302c480
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.101
NETMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=8.8.8.8
DNS2=8.8.8.4
2.主机名确定
hostnamectl set-hostname master  #linux6使用vim /etc/sysconfig/network修改主机名称;linux7使用vim /etc/hostname修改主机名称;
3.hosts文件修改
vim /etc/hosts
192.168.100.101 master
192.168.100.102 s1
192.168.100.103 s2
4.防火墙关闭
systemctl stop firewalld.service
systemctl disable firewalld.service
5.上传文件
sftp root@192.168.100.101
lcd cd
lpwd pwd
put hadoop-2.10.1.tar.gz
get /etc/hosts

上面配置完后重启机器
reboot

6.配置免费登录
ssh-keygen -t rsa   #生成公钥和私钥
ssh-copy-id s1  #本机对s1机器免密登录
namenode机器要对所有机器免密登录(也包含自己); resourcemanager机器要对所有机器免密登录(也包含自己);其它机器之间要相互免密登录

chmod 600 authorized_keys  #更改用户权限,root可不用改,如果用其它免费登录就需要改权限

vim /etc/ssh/ssh_config  #在最后增加文字
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
vim /root/.ssh/config  #关闭Warning: Permanently added 's1,192.168.100.102' (ECDSA) to the list of known hosts.警告信息
UserKnownHostsFile ~/.ssh/known_hosts

7.集群时间同步,找一台机器做为时间服务器,然后修改如下
yum -y install ntp ntpdate  #也可以不安装此时间同步, linux7默认已使用 chronyd来同步时间
yum -y install vim
vim /etc/ntp.conf
#授权192.168.100.0-192.168.100.255网段上的所有机器可以从这台机器上查询和同步时间
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap

#注释掉互联网上的时间服务器(集群在局域网中,不使用其他互联网上的时间)
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

# 填写以下配置,使该NTP服务器在不联网的情况下,使用本服务器的时间作为同步时间
server 127.127.1.0   #添加本机作为服务器
fudge 127.127.1.0 stratum 10  #将优先级改为最高

vim /etc/sysconfig/ntpd
#增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes

#重启ntpd服务及配置开机自动启动
systemctl start ntpd
systemctl status ntpd
systemctl enable ntpd

#也可以直接对主服务时间使用网络同步
crontab -e
0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

8.其它客户主机实现主服务时间机器每十分钟同步一次
crontab -e
*/10 * * * * /usr/sbin/ntpdate master

#增加内容如下(让硬件时间与系统时间一起同步),客户机也要修改机器时间
vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes

二、jdk安装
1.下载jdk和hadoop软件
去oracle官网下载 jdk
去hadoop官网下载 hadoop
2.解压jdk和hadoop
tar -xzvf jdk-8u271-linux-x64.tar.gz
tar -xzvf hadoop-2.10.1.tar.gz
3.设置环境变量
vi /root/.bash_profile
export JAVA_HOME=/root/jdk1.8.0_271
export PATH=$JAVA_HOME/bin:$PATH
4.复制jdk到另外两台主机,要一样目录,环境变量也设置一样
scp -r /root/jdk1.8.0_271 root@192.168.100.102:/root/
scp -r /root/jdk1.8.0_271 root@192.168.100.103:/root/


三、hadoop安装
xxx       192.168.100.101/master         192.168.100.102/s1                  192.168.100.103/s2
hdfs      namenode+datanode        datanode                         secondarynamenode + datanode
yarn       nodemanager         nodemanager+resourcemanager         nodemanager

1.修改配置文件,具体配置参考官方文档
/root/hadoop-2.10.1/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/root/jdk1.8.0_271  #需要修改此目录,要写明绝对路径

/root/hadoop-2.10.1/etc/hadoop/yarn-env.sh

/root/hadoop-2.10.1/etc/hadoop/core-site.xml
    <property>
            <name>fs.default.name</name>
            <value>hdfs://master:9000</value>
            <description>namenode节点名称</description>
    </property>
    <property>
            <name>io.file.buffer.size</name>
            <value>131072</value>
            <description>单位为KB</description>
    </property>
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/root/hadoop-2.10.1/tmp</value>
            <description>Abasefor other temporary directories.</description>
    </property>
    <property>
        <name>fs.trash.interval</name>
        <value>3</value>
        <description>回收站文件保留时间,单位分钟</description>
    </property>
    <property>
        <name>fs.trash.checkpoint.interval</name>
        <value>1440</value>
        <description>回收站的检查间隔,应该是小于或者等于fs.trash.interval,单位分钟</description>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
        <description>回收站里面可以查看的用户,默认是dr.who,有设置回收站建议修改</description>
    </property>
     <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
        <description>通过httpfs接口hdfs的ip地址限制</description>
     </property>
     <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
        <description>通过httpfs接口访问的用户获得的群组身份</description>
     </property>

/root/hadoop-2.10.1/etc/hadoop/hdfs-site.xml
<property>
        <name>dfs.replication</name>
        <value>2</value>
        <description>表示数据块的备份数量,不能大于DataNode的数量</description>
</property>
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>s2:50090</value>
        <description>secondarynamenode配置的机器;是namenode节点名称的备份</description>
</property>
<property>
        <name>dfs.namenode.name.dir</name>
        <value>/root/hadoop-2.10.1/namenode</value>
        <description>表示NameNode需要存储数据的地方;可以设置多个目录用逗号隔开,那么名称表将复制到所有目录中,以实现冗余。</description>
</property>
<property>
        <name>dfs.datanode.data.dir</name>
        <value>/root/hadoop-2.10.1/datanode</value>
        <description>DataNode存放数据的地方;可以设置多个目录用逗号隔开,数据将存储在某一个目录中,不实现冗余,某机器增加磁盘后会选择此项</description>
</property>
<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
    <description>单位为毫秒;datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。</description>
</property>
<property>
    <name> dfs.heartbeat.interval </name>
    <value>3</value>
    <description>单位为秒;默认dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒;timeout  = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval</description>
</property>
<property>
    <name>dfs.hosts</name>   #使用 hdfs dfsadmin -refreshNodes 命令来使此配置生效
    <value>/root/hadoop-2.10.1/etc/hadoop/dfs.hosts</value>
    <description>列出了连入namenode的节点,如果为空,则所有的datanode都可以连入namenode。如果不为空,则文件中存在的datanode可以连入。</description>
</property>
<property>
    <name>dfs.hosts.exclude</name>   #使用 hdfs dfsadmin -refreshNodes 命令来使此配置生效
    <value>/root/hadoop-2.10.1/etc/hadoop/dfs.hosts.exclude</value>
    <description>列出了禁止连入namenode的节点。如果一个节点同时存在于dfs.hosts和dfs.hosts.exclude,则禁止连入 </description>
</property>

dfs.namenode.checkpoint.period:两次检查点创建之间的固定时间间隔,默认3600,即1小时
dfs.namenode.checkpoint.txns:standby namenode 检查的事务数量。若检查事务数达到这个值,也触发一次checkpoint,默认1000000次
dfs.namenode.checkpoint.check.period:standby namenode检查事务数量(dfs.namenode.checkpoint.txns)是否满足建立checkpoint的条件的检查周期。默认60,即每1min检查一次。

/root/hadoop-2.10.1/etc/hadoop/yarn-env.sh
export JAVA_HOME=/root/jdk1.8.0_271  #此处export JAVA_HOME=$JAVA_HOME不改也不会报错,和hadoop-env.sh不一样,很奇怪

/root/hadoop-2.10.1/etc/hadoop/yarn-site.xml
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>s1</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
        <description>开启日志聚集功能</description>
    </property>
    <property>
       <name>yarn.log-aggregation.retain-seconds</name>
       <value>640800</value>
       <description>日志聚集保留时间单位秒</description>
    </property>
    
/root/hadoop-2.10.1/etc/hadoop/mapred-env.sh
export JAVA_HOME=/root/jdk1.8.0_271  #此处没改也可用,奇怪

/root/hadoop-2.10.1/etc/hadoop/mapred-site.xml  # 此文件从mapred-site.xml.template复制过来
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
        
/root/hadoop-2.10.1/etc/hadoop/slaves  #Warning: Permanently added 'master,192.168.100.101' (ECDSA) to the list of known hosts  此处需要给每个机器的机器名且localhost要去掉
master
s1
s2

2.修改环境变量 ;三台机器都修改 并拷贝hadoop文件和配置文件到其它两台机器
vim /root/.bash_profile
export HADOOP_HOME=/root/hadoop-2.10.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

scp -r /root/.bash_profile root@192.168.100.102:/root/
scp -r /root/.bash_profile root@192.168.100.103:/root/

scp -r /root/hadoop-2.10.1 root@192.168.100.102:/root/hadoop-2.10.1
scp -r /root/hadoop-2.10.1 root@192.168.100.103:/root/hadoop-2.10.1

3.格式化hadoop 。如果失败可多次执行,成功后只能执行一次,再执行需要删除 tmp,namenode,datanode,logs 目录下所有东西才行
hdfs namenode -format

4.启动HADOOP
start-all.sh #不再推荐使用此模式启动
stop-all.sh  #如果要重启hadoop需要先停止,不再推荐使用此模式启动
上面的启动可以分部启动
hadoop-daemon.sh start|stop namenode|datanode/secondarynamenode  #http://192.168.100.101:50070/此进程启动后可以查看hdfs文件系统
yarn-daemon.sh start|stop ResourceManager|nodemanager   # http://192.168.100.101:8088/cluster 此进程启动后可以查看yarn资源管理系统
推荐使用如下启动方式
start-dfs.sh/stop-dfs.sh #分模块启动hdfs,首选此模式启动;  在namenode机器上使用此命令
start-yarn.sh/stop-yarn.sh  #分模块启动yarn,首选此模式启动; 在resourcemanager机器上使用此命令


Cannot delete /tmp/hadoop-yarn/staging/root/.staging/job_1608169864320_0001. Name node is in safe mode.
解决方法 
mr-jobhistory-daemon.sh start historyserver  #http://master:19888/jobhistory 此进程启动后可以查看历史运行job服务;此进程不受start-all.sh和stop-all.sh限制
mr-jobhistory-daemon.sh stop historyserver

5.启动问题处理
1.master: Error: JAVA_HOME is not set and could not be found.
需要修改 hadoop-env.sh文件中JAVA_HOME的目录指定到绝对路径,不能用$JAVA_HOME。  不知道为什么,三台机器都要改
2.windows远程主机打不开 50070,8080,19888等网页,需要在 C:\Windows\System32\drivers\etc\hosts增加集群的ip地址
192.168.100.101 master
192.168.100.102 s1
192.168.100.103 s2

7.验证是否启动成功
[root@master ~]# jps   # NameNode 和 SecondaryNameNode不能在一台机器上,装的时候没有划分好
5824 NameNode   
6753 JobHistoryServer
7493 Jps
6136 SecondaryNameNode
6284 ResourceManager   # ResourceManager也很重要,要与NameNode,SecondaryNameNode分开,总之这三个任务不能在一台机器上
5965 DataNode
6399 NodeManager

8.案例小程序测试
 hadoop jar /root/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar pi 10 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值