您的位置:首页 > 运维架构

Hadoop,hbase,hive,zookeeper,mapreduce,hdfs

2016-08-18 21:11 501 查看
安装hadoop2.4.1

先上传hadoop的安装包到服务器上去/home/hadoop/

注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop

伪分布式需要修改5个配置文件

3.1配置hadoop

第一个:hadoop-env.sh

vim hadoop-env.sh

#第27行

export JAVA_HOME=/usr/java/jdk1.7.0_65

第二个:core-site.xml

<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->

<property>

<name>fs.defaultFS</name>

<value>hdfs://weekend-1206-01:9000</value>

</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/hadoop-2.4.1/tmp</value>

</property>

第三个:hdfs-site.xml hdfs-default.xml (3)

<!-- 指定HDFS副本的数量 -->

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)

mv mapred-site.xml.template mapred-site.xml

vim mapred-site.xml

<!-- 指定mr运行在yarn上 -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

第五个:yarn-site.xml

<!-- 指定YARN的老大(ResourceManager)的地址 -->

<property>

<name>yarn.resourcemanager.hostname</name>

<value>weekend-1206-01</value>

</property>

<!-- reducer获取数据的方式 -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

HDFS架构

一个主节点:namenode:接受用户操作请求、维护文件系统的目录结构、管理文件与block之间的关系(维护元数据信息)

多个从节点:datanode:存储文件、文件被分成block存储在磁盘上、为保证数据安全block会有多个副本

zookeeper

配置管理,名字服务,提供分布式同步以及集群管理。

配置管理

保证配置在集群中的一致性。如果我们配置非常多,有很多服务器都需要这个配置,而且还可能是动态的话使用配置文件就不太好。

比如:在HBase中,客户端就是连接一个Zookeeper,获得必要的HBase集群的配置信息,然后才可以进一步操作。

名字服务

如果在本地保存服务的地址时非常不便,但如果我们只需访问一个大家都熟知的访问点,这里提供统一的入口,那么维护起来将方便多了。

分布式锁

在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。这种设计叫(leader选举)。

集群管理

集群中其他机器需要感知到这种变化,然后根据这种变化做出对应的决策。

hive

1数据仓库工具(数据提取转化加载(ETL)),存储、查询和分析,可将sql语句转换为MapReduce任务进行运行(快速实现简单的MapReduce统计),

2Hive不提供实时的查询和数据更新操作。Hive的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。

3hive延迟大

4Hive是用SQL替代写MR的编程框架,把用户提交的SQL语句做语法分析,转换成MR job提交去跑,返回结果给用户。不然每次都写MR很麻烦。

Hive 和数据库的异同

数据存储位置:Hive 是建立在 Hadoop之上的,所有 Hive 的数据都--HDFS 中的。而数据库---本地文件系统中。

数据格式:Hive 中没有定义专门的数据格式,数据格式可以由用户指定。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。 所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。

数据更新:Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的

索引:Hive-没有索引-暴力扫描-访问延迟较高-但MapReduce引入。数据库-索引-少量数据-高效率-低延迟。Hive-访问延迟较高-不适合在线数据查询

执行:Hive-Hadoop提供MapReduce实现。数据库通常有自己的执行引擎。

可扩展性:Hive-Hadoop-可扩展性一致。数据库-ACID语义的严格限制-扩展行有限-扩展能力也只有 100 台左右。

数据规模:Hive-集群上-利用 MapReduce-并行计算-大规模数据。数据库-小。

(1)Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive中的表,只需要在创建表的时告诉Hive数据中的列分隔符和 行分隔符,Hive就可以解析数据。

(2)Hive中所有的数据都存储在HDFS 中,Hive中包含以下数据模型:表(Table),外部表(External Table),分区(Partition),桶(Bucket)。

Hive中的Table和数据库中的Table在概念上是类似的,每一个Table在 Hive中都有一个相应的目录存储数据。

Partition 对应于数据库中的 Partition 列的密集索引,但是Hive中 Partition 的组织方式和数据库中的很不相同。在Hive中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。

hbase

HBase-非结构化数据存储的数据库-基于列不是基于行的模式。

Hbase-利用HDFS作为文件存储系统-利用mapreduce处理海量数据-利用zookeeper作为协调工具

在HBase系统上运行批处理运算,最方便和实用的模型依然是MapReduce,HBase Table和Region的关系,类似HDFS File和Block的关系,

ClientHBase Client使用HBase的RPC机制与(HMaster和HRegionServer)进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类 操作,Client与HRegionServer(响应用户I/O请求)进行RPC

Master:为region server分配region;负责region server的负载均衡;发现失效的regionserver并重新分配其上的region。

mapreduce

JobTracker-NameNode;TaskTracker-DataNode,DataNode 和NameNode 是针对数据存放来而言的

JobTracker和TaskTracker是对于MapReduce执行而言的

mapreduce整体上可以分为这么几条执行线索:jobclient,JobTracker与TaskTracker。

1、JobClient会在用户端通过JobClient类将应用已经配置参数打包成jar文件存储到hdfs,

并把路径提交到Jobtracker,然后由JobTracker创建每一个Task(即MapTask和ReduceTask)

并将它们分发到各个TaskTracker服务中去执行

2、JobTracker是一个master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务task运行于TaskTracker上,

并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。

3、TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。

TaskTracker都需要运行在HDFS的DataNode上.

MAP引擎

解析每条数据记录,传递给用户编写的map()

将map()输出数据写入本地磁盘(如果是map-only作业,直接写入HDFS)

Reduce引擎

从Map Task上远程读取输入数据

对数据排序

将数据按照分组传递给用户编写的reduce()

map()任务处理

读取文件内容,解析成key-value键值对,对输入文件的每一行解析成key、value,对每个键值对调用一次map函数

写自己的逻辑,对输入的key、value转换成新的key、value

//对输出的key、value进行分区

//对不同分区的数据按照key进行排序、分组,相同key的value放到一个集合中

//分组后的数据进行归约(reduce)

reduce()任务处理

//对多个map任务的输出按照不同的分区,通过网络拷贝到不同的reduce节点中(shuffle阶段)

//对多个map任务的输出进行合并、排序(sort阶段)

写自己的reduce逻辑对输入的key、value进行处理,转换成新的key、value

把reduce的输出保存到文件中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐