文章目錄
hadoop概述
- HDFS 分佈式文件系統 用於存儲數據
- MapReduce 分佈式計算框架 用於計算數據 只適合離線分析 只專注於任務的執行, 任務的調度交給YARN
- YARN 雲操作系統 資源的調度可以運行MapReduce, spark, 擴展性更高一些
- zookeeper 協調集羣之間的同步
- 節點類型 命名爲znode 保存大小爲1M
- 持久類型 客戶端進行連接中斷之後, znode節點不會刪除
- 臨時類型 客戶端進行連接中斷之後, 節點會被刪除
- 投票機制—面試題
- 沒有數據的情況:
通過myid給自己投票, 根據myid的大小絕點票數, 誰的票最多, 誰就是leader, 半數以上的的節點運行成功之後, 才能提供服務 - 有數據的情況:
根據xid數據的更新版本號爲標準, 如果xid一樣則判斷myid的票數
- 沒有數據的情況:
- HA原理解答思路:
- 存在的服務: zookeeper, jnode, zkfc
- 什麼是HA?
兩個節點:一個Active一個standby, 解決了namenode單點故障
同步元數據:jnode節點同步edits編輯日誌, 也要是一個集羣, 安全性得到了保障, 一致性減弱了, 爲了解決一致性的問題, 需要存在zookeeper,用來監控集羣, 當某一個節點出現問題時, 找一個空閒節點來接替出現故障的節點 - 切換機制:
首先要監控到namenode,當一個namanode出現故障的時候, 才能進行切換, 通過ZKFCRPC調用監控namenode, 一旦一個namenode出現故障, zookeeper就會通知另外一個namenode的zkfc的進程啓動standby,kill掉active執行一個ssh進程調用.
- 節點類型 命名爲znode 保存大小爲1M
ResourceManager HA
一、集羣規劃(3臺)
PC01 | PC02 | PC03 |
---|---|---|
NameNode | NameNode | |
ZKFC | ZKFC | |
ResourceManager | ResourceManager | |
DataNode | DataNode | DataNode |
JournalNode | JournalNode | JournalNode |
NodeManager | NodeManager | NodeManager |
ZooKeeper | ZooKeeper | ZooKeeper |
二、修改配置文件
=====yarn-site.xml
<!--啓用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rmcluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop.senior02</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop.senior03</value>
</property>
<!--指定zookeeper集羣的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hh1:2181,hh2:2181,hh3:2181</value>
</property>
<!--啓用自動恢復-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的狀態信息存儲在zookeeper集羣-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
三、分發配置文件
將yarn-site.xml分發到其他兩臺
scp etc/hadoop/yarn-site.xml hh2:/opt/modules/hadoop-2.5.0/etc/hadoop/
scp etc/hadoop/yarn-site.xml hh3:/opt/modules/hadoop-2.5.0/etc/hadoop/
四、啓動ResourceManagere
在PC2上:
sbin/start-yarn.sh
在pc3上單獨啓動:
sbin/yarn-daemon.sh start resourcemanager
五、查看狀態及測試
查看狀態
bin/yarn rmadmin -getServiceState rm1 ##查看rm1的狀態
bin/yarn rmadmin -getServiceState rm2 ##查看rm2的狀態
查看web界面
hh2:8088
hh3:8088
當PC02的ResourceManager是Active狀態的時候,訪問PC03的ResourceManager會自動跳轉到PC02的web頁面
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar pi 1 3
【PC1】
[hadoop@hadoop hadoop-2.5.0]$ jps
12837 DataNode
13199 DFSZKFailoverController
13022 JournalNode
13430 Jps
9386 QuorumPeerMain
13312 NodeManager
12738 NameNod
【PC2】
[hadoop@hadoop hadoop-2.5.0]$ jps
9648 ResourceManager
9260 NameNode
9547 DFSZKFailoverController
7184 QuorumPeerMain
9422 JournalNode
9329 DataNode
10084 Jps
9744 NodeManager
【PC3】
[hadoop@hadoop hadoop-2.5.0]$ jps
6815 ResourceManager
6537 JournalNode
5449 QuorumPeerMain
6630 NodeManager
6871 Jps
6447 DataNode
Hive
Hive是什麼?
-
主要用於解決海量數據的日誌分析, 是基於hadoop的數據倉庫工具, 可以把結構化的數據映射成一張表, 通過MR模板在YARN上運行MapReduce的程序
-
運行SQL語句, 稱爲HQL, 本質上把HQL語句轉換爲MapReduce程序運行
-
數據庫和數據倉庫的區別:
數據庫直接存儲數據, 而數據倉庫不直接存儲數據, 數據存儲到HDFS 上 -
Hive的特點:
優點: 簡單, 容易上手, 維護方便, 學習容易
缺點: 自動生成的MapReduce程序不夠靈活, 智能, 效率方面不是很高
hive的安裝部署
- 課程中會用到Apache和CDH兩個版本
- 由於hive是依賴於hadoop的, 所以先把hadoop相關的服務啓動
- 配置hive
–>解壓 tar -zxvf apache-hive-1.2.1-bin.tar.gz -C [一個安裝目錄]
–>創建目錄用於保存hive的所有數據, 便於管理
–>修改權限bin/hdfs dfs -mkdir /tmp bin/hdfs dfs -mkdir /user/hive/warehouse
bin/hdfs dfs -chmod g+w /tmp bin/hdfs dfs -chmod g+w /user/hive/warehouse
- hive在HDFS上的默認路徑
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property>
- 修改hive-env.sh(改名)
# Set HADOOP_HOME to point to a specific hadoop install directory HADOOP_HOME=/opt/moduels/hadoop-2.5.0 # Hive Configuration Directory can be controlled by: export HIVE_CONF_DIR=/opt/moduels/hive-0.13.1-bin/conf
- 啓動hive
${HIVE_HOME}/bin/hive
數據庫操作
一 基本操作
- 查看數據庫
show databases;
- 創建數據庫
create database test;
- 使用數據庫
use test;
- 查看數據庫下所有的表
show tables;
- 創建數據庫表
create table student (id int , name string);
- 查看錶結構
desc student;
- 增加數據
insert into student values(20,"tom");
- 查詢表中的數據
select * from student;
二 本地數據導入到hive
- 在本地目錄準備好需要導入的數據/data
- 創建指定分隔符的數據表
create table student(id int , name string) row format delimited fields terminated by ‘\t’; - 加載數據到數據表中load data local inpath ‘/data/student.txt’ into table student;
三 刪除數據庫
drop database test; //只能刪除一個空的數據庫
drop database test cascade;//如果要刪除的數據庫不爲空,裏面存在數據表,則可以加上關鍵字cascade
四 刪除表
- 先創建一個普通的表,指定文件的位置爲一個存在數據的位置
create table student4(id int,name string)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student';
- 刪除後對該表進行查詢,發現也可以查詢到數據
drop table student4;
- 管理表和外部表
- 管理表:對於表中的結構存在所屬權, 對於創建一個普通的表來說, 默認就是管理表
- 外部表:表中的結構不存在所屬權, 因爲創建的表爲外表, 對數據沒有所有的權限, 就相當於不完全擁有這份數據
- 創建外部表
create EXTERNAL table student4(id int,name string)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student';
通過這種方式創建外部表, 在刪除的時候不會刪除原來的數據.