Hadoop系列

Hadoop环境搭建

Index of /cdh5/cdh/5
hadoop-2.6.0-cdh5.7.0.tar.gz
hive-1.1.0-cdh5.7.0.tar.gz
spark-2.1.1-bin-hadoop2.7.tgz

软件存放路径
hadoop/hadoop
/home/hadoop
software: 存放所有下载的软件包
app:存放所有软件的安装目录
data:存放测试数据
source:存放软件源码,spark
1)下载hadoop
2)安装jdk,配置到系统环境变量里面(~/.bash_profile)

export JAVA_HOME=/home/hadoop/app/jdk1.7.0_51
export PATH=$JAVA_HOME/bin:$PATH

export MAVEN_HOME=/home/hadoop/app/apache-maven-3.3.9
export PATH=$MAVEN_HOME/bin:$PATH

export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
export PATH=$HADOOP_HOME/bin:$PATH

export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH

export SCALA_HOME=/home/hadoop/app/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH

export SPARK_HOME=/home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0
export PATH=$SPARK_HOME/bin:$PATH

3)设置机器参数
hostname : hadoop001

  • 修改机器名:vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop001
  • 设置ip和hostname的映射关系:/etc/hosts
192.168.68.116 hadoop001
127.0.0.1 localhost
  • 设置ssh免密码登陆(本步骤可以省略,但是后面重启hadoop进程的时候需要手工输入密码才行)
ssh-keygen -t rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

4)hadoop配置文件修改
/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop

  • hadoop-env.sh
      export JAVA_HOME=/home/hadoop/app/jdk1.7.0_51
  • core-site.xml
 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:8020</value>
    </property>

 <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/app/tmp</value>
    </property>
  • etc/hadoop/hdfs-site.xml:
<property>
        <name>dfs.replication</name>
        <value>1</value>
</property>

5)格式化HDFS
注意:这一步操作,只是在第一次时执行,没为此如果到格式化的话,那么HDFS上的额数据就会被清空
bin/hdfs namenode -format
bin目录下是客户端的一些命令
6)启动HDFS
sbin/start-dfs.sh
sbin目录下面是集群相关的命令

cd /home/hadoop/tmp/dfs/ 将name/current下的VERSION中的clusterID复制到data/current下的VERSION中,覆盖掉原来的clusterID 出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而datanode的clusterID 保持不变。
验证是否启动成功:
jps

  • DataNode
  • SecondaryNamenode
  • Namenode

浏览器
http://192.168.68.116:50070

7)停止HDFS
sbin/stop-dfs.sh

Hadoop

Hadoop生态系统

hadoop生态系统

是一个分布式系统基础架构

包括

  • Distributed File System (DFS)
  • YARN
  • MapReduce
为什么很多公司选择Hadoop作为大数据平台的解决方案

1)开源
2)社区活跃,参与者多
3)涉及到分布式存储和计算的方方面面:

  • Flume进行数据采集
  • spark/mapreduce/hive进行数据处理
  • HDFS/Hbase 进行数据存储

4)已经得到企业界的验证

HDFS

  • Hadoop实现的一个分布式文件系统 (Hadoop Distributed File System)
  • 基于Google的FGS论文,发表于2003年,是GFS的克隆版
HDFS的设计目标:
  • 非常巨大的分布式文件系统
  • 运行在普通的廉价硬件上
  • 易扩展、为用户提供性能不错的文件存储服务,简单的增加机器扩展存储量
HDFS架构:

1)1 个Master(NameNode简称NN) 带 N个Slaves(DataNode简称DN)
HDFS/YARM/Hbase 都采用这种架构

2)一个文件会被拆分成多个Block,按照blocksize的规则拆分
如果blocksize:128M
文件130M ==> 会被拆分成两个block:128M 和 2M
并且两个Block不会存放在一个DataNode上,会被分散的存在多个DataNode上,防止机器挂掉,丢失数据

3)NameNode和DataNode
  通常可以放在一些廉价的机器上,通常是Linux系统。一个典型的架构是,一台机器上运行一个NameNode,其他的机器,每一个部署一个DataNode。也可以一台机器运行多个DataNodes,但是生产环境不这么干。

  • NameNode
    1)负责客户端请求的响应
    2)负责元数据的管理,当一个发起一个读的请求的时候,首先要去NN上查文件在什么地方(文件的名称,副本系数,Blocks存放的DNs)
    3)操作文件,打开一个文件,关闭文件,重命名文件或目录,还决定了Block到底存在那个DataNode上。

  • DataNode
    1)存储用户的文件对应的数据块(Block),真正的数据的存储
    2)响应文件系统客户端发过来的读写请求,还有Block创建,删除,副本的管理
    3)要定期向NameNode发送心跳信息,汇报本身及其所有的block的信息,健康状况

HDFS架构

资源调度框架YARN

YARN的架构

这里写图片描述
1个RM(ResourceManager) + N个 NN(NodeManager)

  • ResourceManager的职责
    整个集群中active状态的RM只有一个,负责这个集群中资源的管理和调度
    1)处理客户端提交的请求,比如启动一个作业,杀死一个作业
    2)接收一个一个作业后,RM会启动一个Application Master(一个作业对应一个AM)
    3)监控NodeManager状态
    4)系统的而资源分配和调度

  • NodeManager:整个集群中有N个,负责N个节点的资源和使用以及task的运行情况
    1)定期向RM汇报本节点的资源使用情况和各个Container的运行状态
    2)接收应处理RM的container启停的各种命令
    3)单个节点的资源鬼案例和任务管理

  • Application Master:每个作业对应一个,负责应用程序的管理
    1)数据切分
    2)为应用程序向RM申请资源(container),并分配给内部任务
    3)于NN同喜以启停task,task是运行在container中的
    4)task的监控和容错

-Container:对一个任务运行情况的描述:CPU,memory,环境变量等

YARN执行流程

YARN执行流程
1)用户向YARN提交作业
2)RM为该作业分配第一个Container(AM)
3)RM于对应的NM通信,要求NM在这个Container上启动应用程序的AM
4)AM首先向RM注册,然后AM将为各个人物申请资源,并监控运行情况
5)AM采用轮训的方式通过RPC协议向RM申请和领取资源
6)AM申请到资源以后,便和相应的NM通信,要求NM启动任务
7)NM启动我们作业对应的task

YARN环境搭建

1) etc/hadoop/mapred-site.xml:
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

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

2) etc/hadoop/yarn-site.xml:

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

3) 启动
sbin/start-yarn.sh
验证启动是否成功:
jps

  • NodeManager
  • ResourceManager

浏览器

4) 停止
sbin/stop-yarn.sh

5)提交MR作业到yarn上运行:WordCount
官方提供的代码在这个地方
/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar

hadoop jar /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /input/wc/hello.txt /output/wc/

再次运行的时候会报错,因为文件已经存在了,删掉就可以了
hadoop -rm -r /output/wc

Hive

2007 年开始

背景:
  • MapReduce 编程的不便性
  • HDFS上的文件缺少Schema,(不能通过SQL查询HDFS上的数据)

描述

  • 由facebook开源,最初用于解决海量结构化日志数据统计问题
  • 构建在hadoop之上的数据仓库
  • hive定义了一种类SQL的查询语言:HQL(类似SQL但不完全相同)
  • 通常用于进行离线数据处理(以前底层采用MapReduce,现在的底层支持多种不同的执行引擎spark,tez)
    hive on MapReduce
    hive on tez
    hive on spark
  • 支持多种不同的压缩格式,存储格式以及自定义函数。
    压缩:GZIP,LZO,Snappy,BZIP2…
    存储:TextFile,SequenceFile,RCFile,ORC,Parquet

为什么使用Hive

  • 简单,容易上手(提供了HQL)
  • 为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储)
  • 统一的元数据管理(可与Presto/Impala/SparkSQL等共享数据),在hive中创建了一个表,可以在sparkSQL中使用,反之亦然

Hive体系架构

hive体系架构
元数据存放在MySQL中(表名,字段,类型等),生产环境还要做主备
Hive的生产环境架构
Hive的生产环境架构

Hive环境搭建

http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app/

1)配置环境变量

export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
export PATH=$HADOOP_HOME/bin:$PATH

2)事先安装一个MySQL
建一个文件hive-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/sparksql?createDatabaseIfNotExist=true</value>
    </property>

<property>
      <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        </property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    </property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    </property>


</configuration>

3)hive-env.sh中添加

HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

4)复制MySQL驱动到/hive/lib中
5)启动hive
$HIVE_HOME/bin/hive

Hive基本使用

  • 创建表
CREATE TABLE hive_wordcount(context string);
  • 加载数据到hive表
    LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE tablename
load data local inpath '/home/hadoop/data/hello.txt' into table hive_wordcount;

select word,count(1) from hive_wordcount lateral view explode(split(context,'\t')) wc as word group by word;

lateral view explode() :是把每行记录按照指定分隔符进行拆解

hive SQL提交执行以后会生成MR作业,并在yarn上运行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值