hadoop笔记

Posted on 2019-04-20 18:44  drsnow  阅读(263)  评论(0)    收藏  举报

hadoop笔记

注:来自我的markdown笔记文件,应该会有些不足之处,其中有些基础步骤,如环境变量配置就没列出详细代码了哈,

附,当前笔记:

链接:https://pan.baidu.com/s/1LtUiMZX4W0rwsLKTin6Fuw
提取码:fud1
复制这段内容后打开百度网盘手机App,操作更方便哦

一,关于hadoop

1.hadoop来源

hadoop的思想起源于google,google对于大量网页的存储:利用冗余储存方法应对节点失效时数据的挽回,page-rank网页价值计算方法,分散计算任务,

 

2.关于各个进程

1),namenode

hdfs守护进程,

记录文件是如何分割成数据块的,以及数据块存在哪些节点上,

对内存和I/O进行集中管理,

是单点发生故障将使集群崩溃

2),secondary namenode (辅助namenode)

监控HDFS状态的辅助后台程序,

每个集群都有一个,

与NameNode进行通讯,定期保存HDFS元数据快照,

当NameNode故障可以作为备用NameNode使用

3),Datanode

每台从服务器都运行一个,

负责把HDFS数据块读写到本地文件系统

4),jobtracker

用于处理作业(用户提交代码)的后台程序,

决定有哪些文件参与处理,然后切割task并分配节点,

监控task,重启失败的task(于不同的节点),

每个集群只有唯一一个JobTracker,位于Master节点

5),tasktracker

位于slave节点上,与datanode结合(代码与数据一起的原则),

管理各自节点上的task(由jobtracker分配)

每个节点只有一个tasktracker,但一个tasktracker可以启动多个jvm,用于并行执行map或者reduce任务

与jobtracker交互

 

3,edits,fsimage合并过程

 

二,hadoop集群安装

 

1.关闭防火墙

# 关闭 “系统防火墙” 命令
systemctl stop firewalld.service
# 关闭 “系统防火墙” 自启动命令
systemctl disable firewalld.service

 

2.关闭selinux

# 关闭 “SELinux”命令
setenforce 0
# 关闭“SELinux”系统系统自启动服务
vi /etc/selinux/config
# 修改内容
SELINUX=disabled

 

3.配置静态ip

4.修改主机名

hostnamectl set-hostname master  #centos7

 

5.添加hadoop用户并配置权限和group

adduser hadoop
passwd hadoop
#输入两次密码

#将新建的hadoop用户添加到hadoop用户组
usermod -a -G hadoop hadoop
cat /etc/group

#赋予root权限
vim /etc/sudoers

hadoop ALL=(ALL) ALL

 

6.修改hosts,环境变量,

配置ssh免密登录

ssh-keygen -t rsa

#然后将所有主机的公钥写到一个文件里(authorized_keys),然后给每台主机复制一份到~/.ssh/目录下

 

7.修改配置文件

 

配置hadoop-env.sh(hadoop的一些环境变量配置)

export JAVA_HOME=/usr/local/java/   #jdk目录

配置yarn-env.sh

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
if [ "$JAVA_HOME" != "" ]; then
 #echo "run java in $JAVA_HOME"
 JAVA_HOME=/usr/local/java/ #jdk目录
fi

配置core-site.xml(hadoop的核心配置)

<configuration>
<property>
       <!-- NameNode的IP地址和端口 -->
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
       <!-- 制定hadoop的temp文件夹地址 -->
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/temp/</value>
</property>
</configuration>

配置hdfs-site.xml(hdfs 的核心配置)

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/dfs/name/</value>
</property>
<property>
<name>dfs.namenode.data.dir</name>
<value>file:/opt/hadoop/dfs/data/</value>
</property>
<property>
       <!-- 文件备份数量(份) -->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

配置mapred-site.xml

<configuration>
<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>
</configuration>

配置yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!-- 客户端地址,向 resouce 请求地址 -->
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<!-- 调入器调入地址 -->
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<!-- notemanager 汇报心跳等任务 -->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<!-- 管理员地址,可发送管理命令等操作 -->
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<!-- 通过浏览器看到 hadoop 情况 -->
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>

配置slaves文件,删除localhost

slave1
slave2

8.复制hadoop到其他节点

scp -r /opt/hadoop/ slave:/opt/

9.运行hadoop

先格式化namenode

hdfs namenode -format

启动

start-all.sh

验证

hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar pi 10 10

10.dfs命令

参考:http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-common/FileSystemShell.html

 

三,Hadoop,HA搭建

 

1.安装配置zookeeper

1)解压zookeeper-3.4.12.tar.gz并重命名文件夹zookeeper

2)新增配置文件

vim zookeeper/conf/zoo.cfg

tickTime=2000
dataDir=/opt/zookeeper/tmp
clientPort=2181
initLimit=5
syncLimit=2
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888

3) 分别在slave1,slave2,slave3上创建zookeeper/tmp/myid

*   #具体数字和zoo.cfg中的server.*对应

4)配置和环境变量

5)启动zookeeper

zkServer.sh start

 

1.修改hdfs-site.xml

<configuration>
   <!--
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/dfs/name/</value>
</property>
<property>
<name>dfs.namenode.data.dir</name>
<value>file:/opt/hadoop/dfs/data/</value>
</property>
<property>
       <!-- 文件备份数量(份) -->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
   
   <!-- HA -->
   <property>
     <name>dfs.nameservices</name>
       <!-- 名字自定义,不过后面的名字也要一致 -->
     <value>adam</value>
   </property>
   <property>
       <!-- 注意dfs.ha.namenodes.* 这个*要和上面那个保持一致 -->
       <name>dfs.ha.namenodes.adam</name>
       <!-- 名字自定义,不过后面的名字也要一致 -->
       <value>nn1,nn2</value>
   </property>
   <!-- 注意name属性 -->
   <property>
       <name>dfs.namenode.rpc-address.adam.nn1</name>
       <value>master:9000</value>
   </property>
   <property>
       <name>dfs.namenode.rpc-address.adam.nn2</name>
       <value>slave1:9000</value>
   </property>
   <property>
       <name>dfs.namenode.http-address.adam.nn2</name>
       <value>master:50070</value>
   </property>
   <property>
       <name>dfs.namenode.http-address.adam.nn2</name>
       <value>slave1:50070</value>
   </property>
   <property>
       <name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://slave2:8485;slave3:8485;slave4:8485/edits</value>
   </property>
   <property>
       <name>dfs.client.failover.proxy.provider.adam</name>
       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
   </property>
   <property>
       <name>dfs.ha.fencing.methods</name>
       <value>sshfence</value>
   </property>
   <property>
       <name>dfs.ha.fencing.ssh.private-key-files</name>
       <value>/root/.ssh/id_rsa</value>
   </property>
   <property>
       <name>dfs.journalnode.edits.dir</name>
       <value>/opt/hadoop/journal/node/local/data</value>
   </property>
   <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
   </property>
</configuration>

 

2.修改core-site.xml

<configuration>
<property>
       <!-- NameNode的IP地址和端口 -->
<name>fs.defaultFS</name>
<!-- <value>hdfs://master:9000</value> -->
       <value>hdfs://adam</value>
</property>
<property>
       <!-- 制定hadoop的temp文件夹地址 -->
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/temp/</value>
</property>
   <property>
       <name>ha.zookeeper.quorum</name>
       <value>slave1:2181,slave2:2181,slave3:2181</value>
   </property>
</configuration>

在配置的journalnode上启动journalnode进程

hadoop-daemon.sh start journalnode

 

格式化并同步两个namenode

在其中一个namenode上运行format命令(hdfs namenode -format)。然后同步到另一台namenode上,可以手动复制粘贴,

格式化zookeeper(namenode )

hdfs zkfc -formatZK

停止journalnode节点(namenode)

stop-dfs.sh

启动

start-all.sh

打开两个namenode的50070网页查看

一个是active,一个是standby

强制杀死活动的namenode主机的java进程

killall java

standby那个变成了active

 

待续...