Hadoop入门

Hadoop简介

大数据处理技术:

  • 储存技术:
    -
  • 计算技术:
  • 大数据处理模型

机架

架构模型

  • 文件元数据metadata
  • 主-NameNode节点保存文件元数据: 单节点 posix
  • DataNode和NameNode保持心跳,提交Block列表
  • hdfsclient和NameNode交互元数据信息
  • hsfsclient和DataNode交互文件block数据(c/s)
  • datanode用文件系统存储数据块

Hadoop版本介绍

  • 版本

    • 1.x
    • 2.x
    • 3.x

    Hapoop3.0 GA版本于2017年12月真是发布

Hadoop3 新特新

  • Classpath isolation - 防止不同版本jar冲突
  • Shell脚本重写 - hadoop2脚本不同
  • 支持HDFS中的擦除编码Erasure encoding
  • DataNode内部添加负载均衡 Disk Balancer
  • MapReduce任务级本地优化
  • MR 内存参数自动推断
  • 基于cgroup的内存隔离和IO Disk隔离
  • 支持更改分配容器的资源 Container resizing

NN ports

应用 Hadoop2 port Hadoop3 port
Namanode 8020 9820
NN Http UI 50070 9870
NN HTTPS UI 50470 9871

SNN PORTS

应用 Hadoop2 port Hadoop3 port
HTTP 50091 9869
HTTP UI 50090 9868

DN PORTS

应用 Hadoop2 port Hadoop3 port
IPC 50020 9867
DN 50010 9866
HTTP UI 50075 9864
HTTPS UI 50470 9863

Hadoop生态

  • Hadoop Common 底层支持, 工具, api
  • HDFS 分布式文件系统
  • MapReduce 并行计算框架
  • YARN 作业调度, 集群资源管理框架
  • 相关项目:
    • Ambari–管理平台
    • Avro–数据序列化系统
    • Cassandra–键值对数据库系统
    • Chukwa–数据收集系统
    • Hbase–分布式数据库系统
    • Hive–分布式数据仓库管理工具
    • Mahout–数据分析挖掘工具库
    • Hama–科学计算工具
    • Pig–大规模数据分析平台
    • Zookeeper-分布式协调系统
    • Sqoop–关系数据转换工具
    • Flume–日志收集工具

配置

  • 修改/path/hadoop/etc/hadoop/hadoop-env.sh 添加环境变量和用户
  • core-site.xml, hdfs-site.xml slaves
  • 格式化 hdfs namenode -format
1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看clusterID
[root@node00 bigdata]# cd hadoop/peseudo/dfs/name/current/
[root@node00 current]# ls
fsimage_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION
[root@node00 current]# cat V*
#Sun Jan 13 17:55:42 CST 2019
namespaceID=1750411322
clusterID=CID-613d7892-7713-4332-a935-83c33f130f01
cTime=1547373342839
storageType=NAME_NODE
blockpoolID=BP-23152900-192.168.80.138-1547373342839
layoutVersion=-64
[root@node00 current]#

如果datanode启动失败:

  • 可能就是clusterID不一致,将name下VERSION的clusterID复制到data下的

高可用分布式配置

项目部署图

NN-1 NN-2 DN ZK ZKFC
node01 * * *
node02 * * * *
node03 * *
node04 *
  • 将/opt/hadoop/hadoop/etc/hadoop 备份 hadoop-full并进入hadoop
  • 配置hadoop-env.sh
1
2
3
4
5
6
export JAVA_HOME=/opt/java8
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
  • 配置core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/bigdata/hadoop/ha</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
</configuration>
  • 配置hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>file:///mnt/filer1/dfs/ha-name-dir-shared</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</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.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
  • zookeeper

    • 下载地址:https://www-us.apache.org/dist/zookeeper/stable/

    • 解压配置环境变量

    • 更改/path/zookeeper/conf,将cfg_sample保存为cfg

      • 更改dataDir=/var/bitdata/zk
      • 末尾追加:
      1
      2
      3
      server.1=node02:2888:3888
      server.2=node03:2888:3888
      server.3=node04:2888:3888
      • more
      1
      2
      mkdir -p /var/bigdata/zk
      echo 1 > /var/bigdata/zk/myid
      • run
      1
      zkServer.sh start/stop/status
      • 总结
        • 选取机制: 设置的myid编号越大越能成为从节点
  • 启动journalnode

1
hdfs -daemon start/stop journalnode
  • 同步standby
1
2
#启动node01的namenode
#同步node02的namenode

MapReduce介绍

MR语义:

数据控制Map数量, 人为控制Reduce数量

split, map, reduce, group, partion的关系:

Map task 和 Reduce task的工作

shuffle和sort的过程描述:

Yarn介绍

什么是 Jobtracker?

  • MRv2: On Yarn
    • Resourcemanager
    • NodeManager
    • Container
  • MR:
  • Client:
    • RM-Client:请求资源
    • AM-Client: 和AM交互

配置Yarn

官方例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node0 hadoop]# ll -h share/hadoop/mapreduce/
总用量 5.0M
-rw-r--r--. 1 1001 1001 553K 9月 10 11:58 hadoop-mapreduce-client-app-2.8.5.jar
-rw-r--r--. 1 1001 1001 765K 9月 10 11:58 hadoop-mapreduce-client-common-2.8.5.jar
-rw-r--r--. 1 1001 1001 1.5M 9月 10 11:58 hadoop-mapreduce-client-core-2.8.5.jar
-rw-r--r--. 1 1001 1001 190K 9月 10 11:58 hadoop-mapreduce-client-hs-2.8.5.jar
-rw-r--r--. 1 1001 1001 31K 9月 10 11:58 hadoop-mapreduce-client-hs-plugins-2.8.5.jar
-rw-r--r--. 1 1001 1001 66K 9月 10 11:58 hadoop-mapreduce-client-jobclient-2.8.5.jar
-rw-r--r--. 1 1001 1001 1.6M 9月 10 11:58 hadoop-mapreduce-client-jobclient-2.8.5-tests.jar
-rw-r--r--. 1 1001 1001 75K 9月 10 11:58 hadoop-mapreduce-client-shuffle-2.8.5.jar
-rw-r--r--. 1 1001 1001 295K 9月 10 11:58 hadoop-mapreduce-examples-2.8.5.jar
drwxr-xr-x. 2 1001 1001 4.0K 9月 10 11:58 jdiff
drwxr-xr-x. 2 1001 1001 4.0K 9月 10 11:58 lib
drwxr-xr-x. 2 1001 1001 30 9月 10 11:58 lib-examples
drwxr-xr-x. 2 1001 1001 4.0K 9月 10 11:58 sources

实例

晒选活动

1
2
3
4
5
6
7
2018-10-01	13
2018-10-10 23
2018-10-11 24
2018-11-01 13
2018-11-10 23
2018-12-01 13
2018-12-10 23

PageRank计算

  • 原理:

    先有权重值, 初始权重都相同

    • 入链==投票
    • 入链数量
    • 入链质量, 质量高的入链,投票就重要

    站在互联网的角度:

    • 只出不入:PR为0
    • 只入不出: PR很高
    • 直接访问网页

    阻尼系数:d=0.86

相同的key为一组,

数据:

1
2
3
4
A	B	D
B C
C A B
D B C

处理:

初始值赋值为1,

1
2
3
<D,1/2>
<D,1/2>
<B,1/2>

页面关系数据:


TF/IDF算法

  • 词频(term frequency) : 通俗就是词频
  • 逆向文件频率(inverse document frequency,IDF)是一个词语普遍

电商推荐

Donate comment here