Hadoop,hbase,hive,zookeeper,mapreduce,hdfs

来源:互联网 发布:mysql压缩版怎么安装 编辑:程序博客网 时间:2024/05/22 11:46
安装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的输出保存到文件中





















0 0
原创粉丝点击