導航:首頁 > 程序命令 > hdfs常用命令

hdfs常用命令

發布時間:2022-09-19 19:41:48

1. 大數據分析應該掌握哪些基礎知識

java基礎語法

· 分支結構if/switch

· 循環結構for/while/do while

· 方法聲明和調用

· 方法重載

· 數組的使用

· 命令行參數、可變參數

IDEA

· IDEA常用設置、常用快捷鍵

· 自定義模板

· 關聯Tomcat

· Web項目案例實操

面向對象編程

· 封裝、繼承、多態、構造器、包

· 異常處理機制

· 抽象類、介面、內部類

· 常有基礎API、集合List/Set/Map

· 泛型、線程的創建和啟動

· 深入集合源碼分析、常見數據結構解析

· 線程的安全、同步和通信、IO流體系

· 反射、類的載入機制、網路編程

Java8/9/10/11新特性

· Lambda表達式、方法引用

· 構造器引用、StreamAPI

· jShell(JShell)命令

· 介面的私有方法、Optional加強

· 局部變數的類型推斷

· 更簡化的編譯運行程序等

MySQL

· DML語言、DDL語言、DCL語言

· 分組查詢、Join查詢、子查詢、Union查詢、函數

· 流程式控制制語句、事務的特點、事務的隔離級別等

JDBC

· 使用JDBC完成資料庫增刪改查操作

· 批處理的操作

· 資料庫連接池的原理及應用

· 常見資料庫連接池C3P0、DBCP、Druid等

Maven

· Maven環境搭建

· 本地倉庫&中央倉庫

· 創建Web工程

· 自動部署

· 持續繼承

· 持續部署

linux

· VI/VIM編輯器

· 系統管理操作&遠程登錄

· 常用命令

· 軟體包管理&企業真題

Shell編程

· 自定義變數與特殊變數

· 運算符

· 條件判斷

· 流程式控制制

· 系統函數&自定義函數

· 常用工具命令

· 面試真題

Hadoop

· Hadoop生態介紹

· Hadoop運行模式

· 源碼編譯

· HDFS文件系統底層詳解

· DN&NN工作機制

· HDFS的API操作

· MapRece框架原理

· 數據壓縮

· Yarn工作機制

· MapRece案例詳解

· Hadoop參數調優

· HDFS存儲多目錄

· 多磁碟數據均衡

· LZO壓縮

· Hadoop基準測試

Zookeeper

· Zookeeper數據結果

· 內部原理

· 選舉機制

· Stat結構體

· 監聽器

· 分布式安裝部署

· API操作

· 實戰案例

· 面試真題

· 啟動停止腳本

HA+新特性

· HDFS-HA集群配置

Hive

· Hive架構原理

· 安裝部署

· 遠程連接

· 常見命令及基本數據類型

· DML數據操作

· 查詢語句

· Join&排序

· 分桶&函數

· 壓縮&存儲

· 企業級調優

· 實戰案例

· 面試真題

Flume

· Flume架構

· Agent內部原理

· 事務

· 安裝部署

· 實戰案例

· 自定義Source

· 自定義Sink

· Ganglia監控

Kafka

· 消息隊列

· Kafka架構

· 集群部署

· 命令行操作

· 工作流程分析

· 分區分配策略

· 數據寫入流程

· 存儲策略

· 高階API

· 低級API

· 攔截器

· 監控

· 高可靠性存儲

· 數據可靠性和持久性保證

· ISR機制

· Kafka壓測

· 機器數量計算

· 分區數計算

· 啟動停止腳本

DataX

· 安裝

· 原理

· 數據一致性

· 空值處理

· LZO壓縮處理

Scala

· Scala基礎入門

· 函數式編程

· 數據結構

· 面向對象編程

· 模式匹配

· 高階函數

· 特質

· 註解&類型參數

· 隱式轉換

· 高級類型

· 案例實操

Spark Core

· 安裝部署

· RDD概述

· 編程模型

· 持久化&檢查點機制

· DAG

· 運算元詳解

· RDD編程進階

· 累加器&廣播變數

Spark SQL

· SparkSQL

· DataFrame

· DataSet

· 自定義UDF&UDAF函數

Spark Streaming

· SparkStreaming

· 背壓機制原理

· Receiver和Direct模式原理

· Window原理及案例實操

· 7x24 不間斷運行&性能考量

Spark內核&優化

· 內核源碼詳解

· 優化詳解

Hbase

· Hbase原理及架構

· 數據讀寫流程

· API使用

· 與Hive和Sqoop集成

· 企業級調優

Presto

· Presto的安裝部署

· 使用Presto執行數倉項目的即席查詢模塊

Ranger2.0

· 許可權管理工具Ranger的安裝和使用

Azkaban3.0

· 任務調度工具Azkaban3.0的安裝部署

· 使用Azkaban進行項目任務調度,實現電話郵件報警

Kylin3.0

· Kylin的安裝部署

· Kylin核心思想

· 使用Kylin對接數據源構建模型

Atlas2.0

· 元數據管理工具Atlas的安裝部署

Zabbix

· 集群監控工具Zabbix的安裝部署

DolphinScheler

· 任務調度工具DolphinScheler的安裝部署

· 實現數倉項目任務的自動化調度、配置郵件報警

Superset

· 使用SuperSet對數倉項目的計算結果進行可視化展示

Echarts

· 使用Echarts對數倉項目的計算結果進行可視化展示

Redis

· Redis安裝部署

· 五大數據類型

· 總體配置

· 持久化

· 事務

· 發布訂閱

· 主從復制

Canal

· 使用Canal實時監控MySQL數據變化採集至實時項目

Flink

· 運行時架構

· 數據源Source

· Window API

· Water Mark

· 狀態編程

· CEP復雜事件處理

Flink SQL

· Flink SQL和Table API詳細解讀

Flink 內核

· Flink內核源碼講解

· 經典面試題講解

Git&GitHub

· 安裝配置

· 本地庫搭建

· 基本操作

· 工作流

· 集中式

ClickHouse

· ClickHouse的安裝部署

· 讀寫機制

· 數據類型

· 執行引擎

DataV

· 使用DataV對實時項目需求計算結果進行可視化展示

sugar

· 結合Springboot對接網路sugar實現數據可視化大屏展示

Maxwell

· 使用Maxwell實時監控MySQL數據變化採集至實時項目

ElasticSearch

· ElasticSearch索引基本操作、案例實操

Kibana

· 通過Kibana配置可視化分析

Springboot

· 利用Springboot開發可視化介面程序

2. 數據分析需要掌握哪些知識

Java基礎語法

  1. · 分支結構if/switch

  2. · 循環結構for/while/do while

  3. · 方法聲明和調用

  4. · 方法重載

  5. · 數組的使用

  6. · 命令行參數、可變參數

IDEA

  1. · IDEA常用設置、常用快捷鍵

  2. · 自定義模板

  3. · 關聯Tomcat

  4. · Web項目案例實操

面向對象編程

  1. · 封裝、繼承、多態、構造器、包

  2. · 異常處理機制

  3. · 抽象類、介面、內部類

  4. · 常有基礎API、集合List/Set/Map

  5. · 泛型、線程的創建和啟動

  6. · 深入集合源碼分析、常見數據結構解析

  7. · 線程的安全、同步和通信、IO流體系

  8. · 反射、類的載入機制、網路編程

Java8/9/10/11
新特性

  1. · Lambda表達式、方法引用

  2. · 構造器引用、StreamAPI

  3. · jShell(JShell)命令

  4. · 介面的私有方法、Optional加強

  5. · 局部變數的類型推斷

  6. · 更簡化的編譯運行程序等

MySQL

  1. · DML語言、DDL語言、DCL語言

  2. · 分組查詢、Join查詢、子查詢、Union查詢、函數

  3. · 流程式控制制語句、事務的特點、事務的隔離級別等

JDBC

  1. · 使用JDBC完成資料庫增刪改查操作

  2. · 批處理的操作

  3. · 資料庫連接池的原理及應用

  4. · 常見資料庫連接池C3P0、DBCP、Druid等

Maven

  1. · Maven環境搭建

  2. · 本地倉庫&中央倉庫

  3. · 創建Web工程

  4. · 自動部署

  5. · 持續繼承

  6. · 持續部署

Linux

  1. · VI/VIM編輯器

  2. · 系統管理操作&遠程登錄

  3. · 常用命令

  4. · 軟體包管理&企業真題

Shell編程

  1. · 自定義變數與特殊變數

  2. · 運算符

  3. · 條件判斷

  4. · 流程式控制制

  5. · 系統函數&自定義函數

  6. · 常用工具命令

  7. · 面試真題

Hadoop

  1. · Hadoop生態介紹

  2. · Hadoop運行模式

  3. · 源碼編譯

  4. · HDFS文件系統底層詳解

  5. · DN&NN工作機制

  6. · HDFS的API操作

  7. · MapRece框架原理

  8. · 數據壓縮

  9. · Yarn工作機制

  10. · MapRece案例詳解

  11. · Hadoop參數調優

  12. · HDFS存儲多目錄

  13. · 多磁碟數據均衡

  14. · LZO壓縮

  15. · Hadoop基準測試

Zookeeper

  1. · Zookeeper數據結果

  2. · 內部原理

  3. · 選舉機制

  4. · Stat結構體

  5. · 監聽器

  6. · 分布式安裝部署

  7. · API操作

  8. · 實戰案例

  9. · 面試真題

  10. · 啟動停止腳本

HA+新特性

  1. · HDFS-HA集群配置

Hive

  1. · Hive架構原理

  2. · 安裝部署

  3. · 遠程連接

  4. · 常見命令及基本數據類型

  5. · DML數據操作

  6. · 查詢語句

  7. · Join&排序

  8. · 分桶&函數

  9. · 壓縮&存儲

  10. · 企業級調優

  11. · 實戰案例

  12. · 面試真題

Flume

  1. · Flume架構

  2. · Agent內部原理

  3. · 事務

  4. · 安裝部署

  5. · 實戰案例

  6. · 自定義Source

  7. · 自定義Sink

  8. · Ganglia監控

Kafka

  1. · 消息隊列

  2. · Kafka架構

  3. · 集群部署

  4. · 命令行操作

  5. · 工作流程分析

  6. · 分區分配策略

  7. · 數據寫入流程

  8. · 存儲策略

  9. · 高階API

  10. · 低級API

  11. · 攔截器

  12. · 監控

  13. · 高可靠性存儲

  14. · 數據可靠性和持久性保證

  15. · ISR機制

  16. · Kafka壓測

  17. · 機器數量計算

  18. · 分區數計算

  19. · 啟動停止腳本

DataX

  1. · 安裝

  2. · 原理

  3. · 數據一致性

  4. · 空值處理

  5. · LZO壓縮處理

Scala

  1. · Scala基礎入門

  2. · 函數式編程

  3. · 數據結構

  4. · 面向對象編程

  5. · 模式匹配

  6. · 高階函數

  7. · 特質

  8. · 註解&類型參數

  9. · 隱式轉換

  10. · 高級類型

  11. · 案例實操

Spark Core

  1. · 安裝部署

  2. · RDD概述

  3. · 編程模型

  4. · 持久化&檢查點機制

  5. · DAG

  6. · 運算元詳解

  7. · RDD編程進階

  8. · 累加器&廣播變數

Spark SQL

  1. · SparkSQL

  2. · DataFrame

  3. · DataSet

  4. · 自定義UDF&UDAF函數

Spark Streaming

  1. · SparkStreaming

  2. · 背壓機制原理

  3. · Receiver和Direct模式原理

  4. · Window原理及案例實操

  5. · 7x24 不間斷運行&性能考量

Spark內核&優化

  1. · 內核源碼詳解

  2. · 優化詳解

Hbase

  1. · Hbase原理及架構

  2. · 數據讀寫流程

  3. · API使用

  4. · 與Hive和Sqoop集成

  5. · 企業級調優

Presto

  1. · Presto的安裝部署

  2. · 使用Presto執行數倉項目的即席查詢模塊

Ranger2.0

  1. · 許可權管理工具Ranger的安裝和使用

Azkaban3.0

  1. · 任務調度工具Azkaban3.0的安裝部署

  2. · 使用Azkaban進行項目任務調度,實現電話郵件報警

Kylin3.0

  1. · Kylin的安裝部署

  2. · Kylin核心思想

  3. · 使用Kylin對接數據源構建模型

Atlas2.0

  1. · 元數據管理工具Atlas的安裝部署

Zabbix

  1. · 集群監控工具Zabbix的安裝部署

DolphinScheler

  1. · 任務調度工具DolphinScheler的安裝部署

  2. · 實現數倉項目任務的自動化調度、配置郵件報警

Superset

  1. · 使用SuperSet對數倉項目的計算結果進行可視化展示

Echarts

  1. · 使用Echarts對數倉項目的計算結果進行可視化展示

Redis

  1. · Redis安裝部署

  2. · 五大數據類型

  3. · 總體配置

  4. · 持久化

  5. · 事務

  6. · 發布訂閱

  7. · 主從復制

Canal

  1. · 使用Canal實時監控MySQL數據變化採集至實時項目

Flink

  1. · 運行時架構

  2. · 數據源Source

  3. · Window API

  4. · Water Mark

  5. · 狀態編程

  6. · CEP復雜事件處理

Flink SQL

  1. · Flink SQL和Table API詳細解讀

Flink 內核

  1. · Flink內核源碼講解

  2. · 經典面試題講解

Git&GitHub

  1. · 安裝配置

  2. · 本地庫搭建

  3. · 基本操作

  4. · 工作流

  5. · 集中式

ClickHouse

  1. · ClickHouse的安裝部署

  2. · 讀寫機制

  3. · 數據類型

  4. · 執行引擎

DataV

  1. · 使用DataV對實時項目需求計算結果進行可視化展示

sugar

  1. · 結合Springboot對接網路sugar實現數據可視化大屏展示

Maxwell

  1. · 使用Maxwell實時監控MySQL數據變化採集至實時項目

ElasticSearch

  1. · ElasticSearch索引基本操作、案例實操

Kibana

  1. · 通過Kibana配置可視化分析

Springboot

  1. · 利用Springboot開發可視化介面程序

3. hadoop 集群 怎麼設置job 並行工作

4 hadoop啟動
4.1 格式化一個新的分布式文件系統
先格式化一個新的分布式文件系統
$ cd hadoop-0.20.203
$ bin/hadoop namenode -format
成功情況下系統輸出:

12/02/06 00:46:50 INFO namenode.NameNode:STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = ubuntu/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.20.203.0
STARTUP_MSG: build =http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203-r 1099333; compiled by 'oom' on Wed May 4 07:57:50 PDT 2011
************************************************************/

12/02/0600:46:50 INFO namenode.FSNamesystem: fsOwner=root,root
12/02/06 00:46:50 INFO namenode.FSNamesystem:supergroup=supergroup
12/02/06 00:46:50 INFO namenode.FSNamesystem:isPermissionEnabled=true
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name1 has been successfully formatted.
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name2 has been successfully formatted.
12/02/06 00:46:50 INFO namenode.NameNode:SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode atv-jiwan-ubuntu-0/127.0.0.1
************************************************************/

查看輸出保證分布式文件系統格式化成功
執行完後可以到master機器上看到/home/hadoop//name1和/home/hadoop//name2兩個目錄。在主節點master上面啟動hadoop,主節點會啟動所有從節點的hadoop。
4.2 啟動所有節點
啟動方式1:
$ bin/start-all.sh (同時啟動HDFS和Map/Rece)
系統輸出:

starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-ubuntu.out
node2: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out
node3: starting datanode, loggingto /usr/local/hadoop/logs/hadoop-hadoop-datanode-ubuntu.out
node1: starting secondarynamenode,logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-ubuntu.out
starting jobtracker, logging to/usr/local/hadoop/logs/hadoop-hadoop-jobtracker-ubuntu.out
node2: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out
node3: starting tasktracker,logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-ubuntu.out
As you can see in slave's output above, it will automatically format it's storage directory(specified by dfs.data.dir) if it is not formattedalready. It will also create the directory if it does not exist yet.

執行完後可以到master(node1)和slave(node1,node2)機器上看到/home/hadoop/hadoopfs/data1和/home/hadoop/data2兩個目錄。
啟動方式2:
啟動Hadoop集群需要啟動HDFS集群和Map/Rece集群。
在分配的NameNode上,運行下面的命令啟動HDFS:
$ bin/start-dfs.sh(單獨啟動HDFS集群)
bin/start-dfs.sh腳本會參照NameNode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動DataNode守護進程。
在分配的JobTracker上,運行下面的命令啟動Map/Rece:
$bin/start-mapred.sh (單獨啟動Map/Rece)
bin/start-mapred.sh腳本會參照JobTracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動TaskTracker守護進程。

4.3 關閉所有節點
從主節點master關閉hadoop,主節點會關閉所有從節點的hadoop。
$ bin/stop-all.sh
Hadoop守護進程的日誌寫入到 ${HADOOP_LOG_DIR} 目錄 (默認是 ${HADOOP_HOME}/logs).
${HADOOP_HOME}就是安裝路徑.
5 .測試
1)瀏覽NameNode和JobTracker的網路介面,它們的地址默認為:
NameNode - http://node1:50070/
JobTracker - http://node2:50030/
3) 使用netstat –nat查看埠49000和49001是否正在使用。
4) 使用jps查看進程
要想檢查守護進程是否正在運行,可以使用 jps 命令(這是用於 JVM 進程的ps 實用程序)。這個命令列出 5 個守護進程及其進程標識符。
5)將輸入文件拷貝到分布式文件系統:
$ bin/hadoop fs -mkdir input
$ bin/hadoop fs -put conf/core-site.xml input
運行發行版提供的示常式序:
$ bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+'
6.補充
Q: bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+' 什麼意思啊?
A: bin/hadoop jar(使用hadoop運行jar包) hadoop-0.20.2_examples.jar(jar包的名字) grep (要使用的類,後邊的是參數)input output 'dfs[a-z.]+'
整個就是運行hadoop示常式序中的grep,對應的hdfs上的輸入目錄為input、輸出目錄為output。
Q: 什麼是grep?
A: A map/rece program that counts the matches of a regex in the input.
查看輸出文件:
將輸出文件從分布式文件系統拷貝到本地文件系統查看:
$ bin/hadoop fs -get output output
$ cat output/*
或者
在分布式文件系統上查看輸出文件:
$ bin/hadoop fs -cat output/*
統計結果:
root@v-jiwan-ubuntu-0:~/hadoop/hadoop-0.20.2-bak/hadoop-0.20.2#bin/hadoop fs -cat output/part-00000
3 dfs.class
2 dfs.period
1 dfs.file
1 dfs.replication
1 dfs.servers
1 dfsadmin
7. HDFS常用操作

hadoopdfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某個文檔中的文件
hadoop dfs -put test1.txt test 上傳文件到指定目錄並且重新命名,只有所有的DataNode都接收完數據才算成功
hadoop dfs -get in getin 從HDFS獲取文件並且重新命名為getin,同put一樣可操作文件也可操作目錄
hadoop dfs -rmr out 刪除指定文件從HDFS上
hadoop dfs -cat in/* 查看HDFS上in目錄的內容
hadoop dfsadmin -report 查看HDFS的基本統計信息,結果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 進入安全模式

8.添加節點
可擴展性是HDFS的一個重要特性,首先在新加的節點上安裝hadoop,然後修改$HADOOP_HOME/conf/master文件,加入 NameNode主機名,然後在NameNode節點上修改$HADOOP_HOME/conf/slaves文件,加入新加節點主機名,再建立到新加節點無密碼的SSH連接
運行啟動命令:
start-all.sh
然後可以通過http://(Masternode的主機名):50070查看新添加的DataNode
9負載均衡
start-balancer.sh,可以使DataNode節點上選擇策略重新平衡DataNode上的數據塊的分布

結束語:遇到問題時,先查看logs,很有幫助。

10 SHell自動安裝腳本
#!/bin/bash

#validate user or group
validate() {
if [ 'id -u' == 0 ];then
echo "must not be root!"
exit 0
else
echo "---------welcome to hadoop---------"
fi
}

#hadoop install
hd-dir() {
if [ ! -d /home/hadoop/ ];then
mkdir /home/hadoop/
else
echo "download hadoop will begin"
fi
}

download-hd() {
wget -c http://archive.apache.org/dist/hadoop/core/stable/hadoop-1.0.4.tar.gz -O /home/hadoop/hadoop-1.0.4.tar.gz
tar -xzvf /home/hadoop/hadoop-1.0.4.tar.gz -C /home/hadoop
rm /home/hadoop/hadoop-1.0.4.tar.gz
Ln -s /home/hadoop/hadoop-1.0.4 /home/hadoop/hadoop1.0.4
}

#hadoop conf
hd-conf() {
echo "export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386" >> /home/hadoop/hadoop1.0.4/conf/hadoop-env.sh
echo "#set path jdk" >> /home/hadoop/.profile
echo "export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386" >> /home/hadoop/.profile
echo "#hadoop path" >> /home/hadoop/.profile
echo "export HADOOP_HOME=/home/hadoop/hadoop1.0.4" >> /home/hadoop/.profile
echo "PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin" >> /home/hadoop/.profile
echo "HADOOP_HOME_WARN_SUPPRESS=1" >> /home/hadoop/.profile
#hadoop core-site.xml
echo "<configuration>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "<name>fs.default.name</name>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "<value>hdfs://hadoop-master:9000" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "<name>hadoop.tmp.dir</name>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "<value>/home/hadoop/tmp</value>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
echo "</configuration>" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
#hadoop hdfs-site.xml

echo "<configuration>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<name>dfs.name.dir</name>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<value>/home/hadoop/name</value>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<name>dfs.data.dir</name>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<value>/home/hadoop/data</value>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<name>dfs.replication</name>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "<value>1</value>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
echo "</configuration>" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
# hadoop mapred-site.xml

echo "<configuration>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo "<property>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo "<name>mapred.job.tracker</name>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo "<value>hadoop-master:9001</value>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo "</property>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
echo "</configuration>" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
#hadoop master
echo "hadoop-master" >> /home/hadoop/hadoop1.0.4/conf/masters

#hadoop slaves
echo "hadoop-master" >> /home/hadoop/hadoop1.0.4/conf/slaves
source /home/hadoop/.profile
}

hd-start() {
hadoop namenode -format
}

yes-or-no() {
echo "Is your name $* ?"
while true
do
echo -n "Enter yes or no: "
read x
case "$x" in
y | yes ) return 0;;
n | no ) return 1;;
* ) echo "Answer yes or no";;
esac
done
}

echo "Original params are $*"

if yes-or-no "$1"
then
echo "HI $1,nice name!"
validate
hd-dir
download-hd
hd-conf
else
echo "Never mind!"
fi

4. 大數據:Hadoop入門

什麼是大數據:
(1.)大數據是指在一定時間內無法用常規軟體對其內容進行抓取,管理和處理的數據集合,簡而言之就是數據量非常大,大到無法用常規工具進行處理,如關系型資料庫,數據倉庫等。這里「大」是一個什麼量級呢?如在阿里巴巴每天處理數據達到20PB(即20971520GB).
2.大數據的特點:
(1.)體量巨大。按目前的發展趨勢來看,大數據的體量已經到達PB級甚至EB級。
(2.)大數據的數據類型多樣,以非結構化數據為主,如網路雜志,音頻,視屏,圖片,地理位置信息,交易數據,社交數據等。
(3.)價值密度低。有價值的數據僅佔到總數據的一小部分。比如一段視屏中,僅有幾秒的信息是有價值的。
(4.)產生和要求處理速度快。這是大數據區與傳統數據挖掘最顯著的特徵。
3.除此之外還有其他處理系統可以處理大數據。
Hadoop (開源)
Spark(開源)
Storm(開源)
MongoDB(開源)
IBM PureDate(商用)
Oracle Exadata(商用)
SAP Hana(商用)
Teradata AsterData(商用)
EMC GreenPlum(商用)
HP Vertica(商用)
註:這里我們只介紹Hadoop。
二:Hadoop體系結構
Hadoop來源:
Hadoop源於Google在2003到2004年公布的關於GFS(Google File System),MapRece和BigTable的三篇論文,創始人Doug Cutting。Hadoop現在是Apache基金會頂級項目,「
Hadoop」一個虛構的名字。由Doug Cutting的孩子為其黃色玩具大象所命名。
Hadoop的核心:
(1.)HDFS和MapRece是Hadoop的兩大核心。通過HDFS來實現對分布式儲存的底層支持,達到高速並行讀寫與大容量的儲存擴展。
(2.)通過MapRece實現對分布式任務進行處理程序支持,保證高速分區處理數據。
3.Hadoop子項目:
(1.)HDFS:分布式文件系統,整個Hadoop體系的基石。
(2.)MapRece/YARN:並行編程模型。YARN是第二代的MapRece框架,從Hadoop 0.23.01版本後,MapRece被重構,通常也稱為MapRece V2,老MapRece也稱為 MapRece V1。
(3.)Hive:建立在Hadoop上的數據倉庫,提供類似SQL語音的查詢方式,查詢Hadoop中的數據,
(5.)HBase:全稱Hadoop Database,Hadoop的分布式的,面向列的資料庫,來源於Google的關於BigTable的論文,主要用於隨機訪問,實時讀寫的大數據。
(6.)ZooKeeper:是一個為分布式應用所設計的協調服務,主要為用戶提供同步,配置管理,分組和命名等服務,減輕分布式應用程序所承擔的協調任務。
還有其它特別多其它項目這里不做一一解釋了。
三:安裝Hadoop運行環境
用戶創建:
(1.)創建Hadoop用戶組,輸入命令:
groupadd hadoop
(2.)創建hser用戶,輸入命令:
useradd –p hadoop hser
(3.)設置hser的密碼,輸入命令:
passwd hser
按提示輸入兩次密碼
(4.)為hser用戶添加許可權,輸入命令:
#修改許可權
chmod 777 /etc/sudoers
#編輯sudoers
Gedit /etc/sudoers
#還原默認許可權
chmod 440 /etc/sudoers
先修改sudoers 文件許可權,並在文本編輯窗口中查找到行「root ALL=(ALL)」,緊跟後面更新加行「hser ALL=(ALL) ALL」,將hser添加到sudoers。添加完成後切記還原默認許可權,否則系統將不允許使用sudo命令。
(5.)設置好後重啟虛擬機,輸入命令:
Sudo reboot
重啟後切換到hser用戶登錄
安裝JDK
(1.)下載jdk-7u67-linux-x64.rpm,並進入下載目錄。
(2.)運行安裝命令:
Sudo rpm –ivh jdk-7u67-linux-x64.rpm
完成後查看安裝路徑,輸入命令:
Rpm –qa jdk –l
記住該路徑,
(3.)配置環境變數,輸入命令:
Sudo gedit /etc/profile
打開profile文件在文件最下面加入如下內容
export JAVA_HOME=/usr/java/jdk.7.0.67
export CLASSPATH=$ JAVA_HOME/lib:$ CLASSPATH
export PATH=$ JAVA_HOME/bin:$PATH
保存後關閉文件,然後輸入命令使環境變數生效:
Source /etc/profile
(4.)驗證JDK,輸入命令:
Java –version
若出現正確的版本則安裝成功。
配置本機SSH免密碼登錄:
(1.)使用ssh-keygen 生成私鑰與公鑰文件,輸入命令:
ssh-keygen –t rsa
(2.)私鑰留在本機,公鑰發給其它主機(現在是localhost)。輸入命令:
ssh--id localhost
(3.)使用公鑰來登錄輸入命令:
ssh localhost
配置其它主機SSH免密登錄
(1.)克隆兩次。在VMware左側欄中選中虛擬機右擊,在彈出的快捷鍵菜單中選中管理---克隆命令。在克隆類型時選中「創建完整克隆」,單擊「下一步」,按鈕直到完成。
(2.)分別啟動並進入三台虛擬機,使用ifconfig查詢個主機IP地址。
(3.)修改每台主機的hostname及hosts文件。
步驟1:修改hostname,分別在各主機中輸入命令。
Sudo gedit /etc/sysconfig/network
步驟2:修改hosts文件:
sudo gedit /etc/hosts
步驟3:修改三台虛擬機的IP
第一台對應node1虛擬機的IP:192.168.1.130
第二台對應node2虛擬機的IP:192.168.1.131
第三台對應node3虛擬機的IP:192.168.1.132
(4.)由於已經在node1上生成過密鑰對,所有現在只要在node1上輸入命令:
ssh--id node2
ssh--id node3
這樣就可以將node1的公鑰發布到node2,node3。
(5.)測試SSH,在node1上輸入命令:
ssh node2
#退出登錄
exit
ssh node3
exit
四:Hadoop完全分布式安裝
1. Hadoop有三種運行方式:
(1.)單機模式:無須配置,Hadoop被視為一個非分布式模式運行的獨立Java進程
(2.)偽分布式:只有一個節點的集群,這個節點即是Master(主節點,主伺服器)也是Slave(從節點,從伺服器),可在此單節點上以不同的java進程模擬分布式中的各類節點
(3.)完全分布式:對於Hadoop,不同的系統會有不同的節點劃分方式。
2.安裝Hadoop
(1.)獲取Hadoop壓縮包hadoop-2.6.0.tar.gz,下載後可以使用VMWare Tools通過共享文件夾,或者使用Xftp工具傳到node1。進入node1 將壓縮包解壓到/home/hser目錄下,輸入命令: #進入HOME目錄即:「/home/hser」
cd ~
tar –zxvf hadoop-2.6.0.tar.gz
(2.)重命名hadoop輸入命令:
mv hadoop-2.6.0 hadoop
(3.)配置Hadoop環境變數,輸入命令:
Sudo gedit /etc/profile
將以下腳本加到profile內:
#hadoop
export HADOOP_HOME=/home/hser/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
保存關閉,最後輸入命令使配置生效
source /etc/profile
註:node2,和node3都要按照以上配置進行配置。
3.配置Hadoop
(1.)hadoop-env.sh文件用於指定JDK路徑。輸入命令:
[hser@node1 ~]$ cd ~/hadoop/etc/hadoop
[hser@node1 hadoop]$ gedit hadoop-env.sh
然後增加如下內容指定jDK路徑。
export JAVA_HOME=/usr/java/jdk1.7.0_67
(2.)打開指定JDK路徑,輸入命令:
export JAVA_HOME=/usr/java/jdk1.7.0_67
(4.)core-site.xml:該文件是Hadoop全局配置,打開並在元素中增加配置屬性如下:

fs.defaultFs hdfs://node1:9000 hadoop.tmp.dir file:/home/hser/hadoop/tmp 這里給出了兩個常用的配置屬性,fs.defaultFS表示客戶端連接HDFS時,默認路徑前綴,9000是HDFS工作的埠。Hadoop.tmp.dir如不指定會保存到系統的默認臨時文件目錄/tmp中。 (5.)hdfs-site.xml:該文件是hdfs的配置。打開並在元素中增加配置屬性。 (6.)mapred-site.xml:該文件是MapRece的配置,可從模板文件mapred-site.xml.template中復制打開並在元素中增加配置。 (7.)yarn-site.xml:如果在mapred-site.xml配置了使用YARN框架,那麼YARN框架就使用此文件中的配置,打開並在元素中增加配置屬性。 (8.)復制這七個命令到node2,node3。輸入命令如下: scp –r /home/hser/hadoop/etc/hadoop/ hser@node2:/home/hser/hadoop/etc/ scp –r /home/hser/hadoop/etc/hadoop/ hser@node3:/home/hser/hadoop/etc/ 4.驗證: 下面驗證hadoop是否正確 (1.)在Master主機(node1)上格式化NameNode。輸入命令: [hser@node1 ~]$ cd ~/hadoop [hser@node1 hadoop]$ bin/hdfs namenode –format (2)關閉node1,node2 ,node3,系統防火牆並重啟虛擬機。輸入命令: service iptables stop sudo chkconfig iptables off reboot (3.)輸入以下啟動HDFS: [hser@node1 ~]$ cd ~/hadoop (4.)啟動所有 [hser@node1 hadoop]$ sbin/start-all.sh (5.)查看集群狀態: [hser@node1 hadoop]$ bin/hdfs dfsadmin –report (6.)在瀏覽器中查看hdfs運行狀態,網址:http://node1:50070 (7.)停止Hadoop。輸入命令: [hser@node1 hadoop]$ sbin/stop-all.sh 五:Hadoop相關的shell操作 (1.)在操作系統中/home/hser/file目錄下創建file1.txt,file2.txt可使用圖形界面創建。 file1.txt輸入內容: Hello World hi HADOOP file2.txt輸入內容 Hello World hi CHIAN (2.)啟動hdfs後創建目錄/input2 [hser@node1 hadoop]$ bin/hadoop fs –mkdir /input2 (3.)將file1.txt.file2.txt保存到hdfs中: [hser@node1 hadoop]$ bin/hadoop fs –put -/file/file*.txt /input2/ (4.)[hser@node1 hadoop]$ bin/hadoop fs –ls /input2

5. hadoop中命令經常含有-fs,-dfs,fs和dfs有什麼區別作用是什麼

You can see definitions of the two commands (hadoop fs & hadoop dfs) in
可以看一下hadoop的源代碼

$HADOOP_HOME/bin/hadoop
...elif [ "$COMMAND" = "datanode" ] ; then CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode' HADOOP_OPTS="$HADOOP_OPTS $HADOOP_DATANODE_OPTS"elif [ "$COMMAND" = "fs" ] ; then CLASS=org.apache.hadoop.fs.FsShell HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"elif [ "$COMMAND" = "dfs" ] ; then CLASS=org.apache.hadoop.fs.FsShell HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"elif [ "$COMMAND" = "dfsadmin" ] ; then CLASS=org.apache.hadoop.hdfs.tools.DFSAdmin HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"...
So, they are exactly the same.
所以,發現兩者是完全一樣的功能。

謝謝

6. 熟悉常用的 Linux 操作和 Hadoop 操作

1.切換到當前目錄的上一級目錄
cd ..
2.切換到當前登錄 Linux 系統的用戶自己的主文件夾
cd ~
3.進入/tmp 目錄,創建目錄 a1/a2/a3/a4。
mkdir a1/a2/a3/a4 -p
4.刪除目錄
rmdir a
rmdir a1/a2/a3/a4 -p
5.cp 命令:復制文件或目錄
(1) 將當前用戶的主文件夾下的文件.bashrc 復制到目錄「/usr」下,並重命名為 bashrc1
sudo cp .bashrc /usr/bashrc1
(2) 在目錄「/tmp」下新建目錄 test,再把這個目錄復制到「/usr」目錄下
cd /tmp
mkdir test
sudo cp /tmp/test /usr -r
6.mv 命令:移動文件與目錄,或更名
(1) 將「/usr」目錄下的文件 bashrc1 移動到「/usr/test」目錄下
sudo mv /usr/bashrc1 /usr/test
(2) 將「/usr」目錄下的 test 目錄重命名為 test2
sudo mv /usr/test /usr/test2
7.rm 命令:移除文件或目錄
(1) 將「/usr/test2」目錄下的 bashrc1 文件刪除
sudo rm /usr/test2/bashrc1
(2) 將「/usr」目錄下的 test2 目錄刪除
sudo rm -rf /usr/test2
8.cat 命令:查看文件內容查看當前用戶主文件夾下的.bashrc 文件內容
cat .bashrc
9.tac 命令:反向查看文件內容反向查看當前用戶主文件夾下的.bashrc 文件的內容
tac .bashrc
10.more 命令:一頁一頁翻動查看翻頁查看當前用戶主文件夾下的.bashrc 文件的內容
more .bashrc
11.head 命令:取出前面幾行
(1) 查看當前用戶主文件夾下.bashrc 文件內容前 20 行
head -n20 .bashrc
(2)查看當前用戶主文件夾下.bashrc 文件內容,後面 50 行不顯示,只顯示前面幾行
head -n -50 .bashrc
12.tail 命令:取出後面幾行
(1)查看當前用戶主文件夾下.bashrc 文件內容最後 20 行
tail -n20 .bashrc
(2)查看當前用戶主文件夾下.bashrc 文件內容,並且只列出 50 行以後的數據
tail -n -50 .bashrc
13.touch 命令:修改文件時間或創建新文件
(1) 在「/tmp」目錄下創建一個空文件 hello,並查看文件時間
touch hello
stat hello
(2)修改 hello 文件,將文件時間整為 5 天前
touch -d "2019-3-26" hello
stat hello
14.chown 命令:修改文件所有者許可權將 hello 文件所有者改為 root 帳號,並查看屬性
sudo chown root hello
ls -l hello
15.find 命令:文件查找找出主文件夾下文件名為.bashrc 的文件
find .bashrc
16.tar 命令:壓縮命令
(1) 在根目錄「/」下新建文件夾 test,然後在根目錄「/」下打包成 test.tar.gz
tar -zcvf test.tar.gz test/
(2) 把上面的 test.tar.gz 壓縮包,解壓縮到「/tmp」目錄
tar -zxvf test.tar.gz
17.grep 命令:查找字元串從「~/.bashrc」文件中查找字元串'examples'
grep -rn "examples" .bashrc
18.使用 hadoop 用戶登錄 Linux 系統,啟動 Hadoop(Hadoop 的安裝目錄為「/usr/local/hadoop」),為 hadoop 用戶在 HDFS 中創建用戶目錄「/user/hadoop」
./bin/hadoop fs -mkdir -p /usr/hadoop
19.接著在 HDFS 的目錄「/user/hadoop」下,創建 test 文件夾,並查看文件列表
./bin/hdfs dfs -mkdir test
./bin/hadoop fs -ls
20.將 Linux 系統本地的「~/.bashrc」文件上傳到 HDFS 的 test 文件夾中,並查看 test

./bin/hadoop fs -put ~/.bashrc test

./bin/hadoop fs -ls test
21.將 HDFS 文件夾 test 復制到 Linux 系統本地文件系統的「/usr/local/hadoop」目錄下

參考: 1

7. 大數據雲計算好不好學習

說一下大數據的四個典型的特徵:

第一章:Hadoop

在大數據存儲和計算中Hadoop可以算是開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。

關於Hadoop,你至少需要搞清楚這些是什麼:

自己學會如何搭建Hadoop,先讓它跑起來。建議先使用安裝包命令行安裝,不要使用管理工具安裝。現在都用Hadoop 2.0。

目錄操作命令;上傳、下載文件命令;提交運行MapRece示常式序;打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。知道Hadoop的系統日誌在哪裡。

以上完成之後,就應該去了解他們的原理了:

MapRece:如何分而治之;HDFS:數據到底在哪裡,究竟什麼才是副本;

Yarn到底是什麼,它能幹什麼;NameNode到底在幹些什麼;Resource Manager到底在幹些什麼;

如果有合適的學習網站,視頻就去聽課,如果沒有或者比較喜歡書籍,也可以啃書。當然最好的方法是先去搜索出來這些是干什麼的,大概有了概念之後,然後再去聽視頻。

第二章:更高效的WordCount

在這里,一定要學習SQL,它會對你的工作有很大的幫助。

就像是你寫(或者抄)的WordCount一共有幾行代碼?但是你用SQL就非常簡單了,例如:

SELECT word,COUNT(1) FROM wordcount GROUP BY word;

這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,而SQL一行搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供SQL介面。

另外就是SQL On Hadoop之Hive於大數據而言一定要學習的。

什麼是Hive?

官方解釋如下:The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax。

為什麼說Hive是數據倉庫工具,而不是資料庫工具呢?

有的朋友可能不知道數據倉庫,數據倉庫是邏輯上的概念,底層使用的是資料庫,數據倉庫中的數據有這兩個特點:最全的歷史數據(海量)、相對穩定的;所謂相對穩定,指的是數據倉庫不同於業務系統資料庫,數據經常會被更新,數據一旦進入數據倉庫,很少會被更新和刪除,只會被大量查詢。而Hive,也是具備這兩個特點,因此,Hive適合做海量數據的數據倉庫工具,而不是資料庫工具。

了解了它的作用之後,就是安裝配置Hive的環節,當可以正常進入Hive命令行是,就是安裝配置成功了。

了解Hive是怎麼工作的

學會Hive的基本命令:

創建、刪除表;載入數據到表;下載Hive表的數據;

MapRece的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);

HDS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;

自己會寫簡單的MapRece程序,運行出現問題,知道在哪裡查看日誌;

會寫簡單的Select、Where、group by等SQL語句;

Hive SQL轉換成MapRece的大致流程;

Hive中常見的語句:創建表、刪除表、往表中載入數據、分區、將表中數據下載到本地;

從上面的學習,你已經了解到,HDFS是Hadoop提供的分布式存儲框架,它可以用來存儲海量數據,MapRece是Hadoop提供的分布式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On Hadoop,Hive提供了SQL介面,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapRece,提交運行。

此時,你的」大數據平台」是這樣的:那麼問題來了,海量數據如何到HDFS上呢?

第三章:數據採集

把各個數據源的數據採集到Hadoop上。

3.1 HDFS PUT命令

這個在前面你應該已經使用過了。put命令在實際環境中也比較常用,通常配合shell、python等腳本語言來使用。建議熟練掌握。

3.2 HDFS API

HDFS提供了寫數據的API,自己用編程語言將數據寫入HDFS,put命令本身也是使用API。

實際環境中一般自己較少編寫程序使用API來寫數據到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。建議了解原理,會寫Demo。

3.3 Sqoop

Sqoop是一個主要用於Hadoop/Hive與傳統關系型資料庫,Oracle、MySQL、SQLServer等之間進行數據交換的開源框架。就像Hive把SQL翻譯成MapRece一樣,Sqoop把你指定的參數翻譯成MapRece,提交到Hadoop運行,完成Hadoop與其他資料庫之間的數據交換。

自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較復雜)。了解Sqoop常用的配置參數和方法。

使用Sqoop完成從MySQL同步數據到HDFS;使用Sqoop完成從MySQL同步數據到Hive表;如果後續選型確定使用Sqoop作為數據交換工具,那麼建議熟練掌握,否則,了解和會用Demo即可。

3.4 Flume

Flume是一個分布式的海量日誌採集和傳輸框架,因為「採集和傳輸框架」,所以它並不適合關系型資料庫的數據採集和傳輸。Flume可以實時的從網路協議、消息系統、文件系統採集日誌,並傳輸到HDFS上。

因此,如果你的業務有這些數據源的數據,並且需要實時的採集,那麼就應該考慮使用Flume。

下載和配置Flume。使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;Flume的配置和使用較為復雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。

3.5 阿里開源的DataX

現在DataX已經是3.0版本,支持很多數據源。

第四章:把Hadoop上的數據搞到別處去

Hive和MapRece進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?其實,此處的方法和第三章基本一致的。

HDFS GET命令:把HDFS上的文件GET到本地。需要熟練掌握。

HDFS API:同3.2.

Sqoop:同3.3.使用Sqoop完成將HDFS上的文件同步到MySQL;使用Sqoop完成將Hive表中的數據同步到MySQL。

如果你已經按照流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:

知道如何把已有的數據採集到HDFS上,包括離線採集和實時採集;

知道sqoop是HDFS和其他數據源之間的數據交換工具;

知道flume可以用作實時的日誌採集。

從前面的學習,對於大數據平台,你已經掌握的不少的知識和技能,搭建Hadoop集群,把數據採集到Hadoop上,使用Hive和MapRece來分析數據,把分析結果同步到其他數據源。

接下來的問題來了,Hive使用的越來越多,你會發現很多不爽的地方,特別是速度慢,大多情況下,明明我的數據量很小,它都要申請資源,啟動MapRece來執行。

第五章:SQL

其實大家都已經發現Hive後台使用MapRece作為執行引擎,實在是有點慢。因此SQL On Hadoop的框架越來越多,按我的了解,最常用的按照流行度依次為SparkSQL、Impala和Presto.這三種框架基於半內存或者全內存,提供了SQL介面來快速查詢分析Hadoop上的數據。

我們目前使用的是SparkSQL,至於為什麼用SparkSQL,原因大概有以下吧:使用Spark還做了其他事情,不想引入過多的框架;Impala對內存的需求太大,沒有過多資源部署。

5.1 關於Spark和SparkSQL

什麼是Spark,什麼是SparkSQL。

Spark有的核心概念及名詞解釋。

SparkSQL和Spark是什麼關系,SparkSQL和Hive是什麼關系。

SparkSQL為什麼比Hive跑的快。

5.2 如何部署和運行SparkSQL

Spark有哪些部署模式?

如何在Yarn上運行SparkSQL?

使用SparkSQL查詢Hive中的表。Spark不是一門短時間內就能掌握的技術,因此建議在了解了Spark之後,可以先從SparkSQL入手,循序漸進。

關於Spark和SparkSQL,如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。

第六章:數據多次利用

請不要被這個名字所誘惑。其實我想說的是數據的一次採集、多次消費。

在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中了解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,盡管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。

為了滿足數據的一次採集、多次消費的需求,這里要說的便是Kafka。

關於Kafka:什麼是Kafka?Kafka的核心概念及名詞解釋。

如何部署和使用Kafka:使用單機部署Kafka,並成功運行自帶的生產者和消費者例子。使用Java程序自己編寫並運行生產者和消費者程序。Flume和Kafka的集成,使用Flume監控日誌,並將日誌數據實時發送至Kafka。

如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。

這時,使用Flume採集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。

如果你已經認真完整的學習了以上的內容,那麼你應該已經具備以下技能和知識點:

為什麼Spark比MapRece快。

使用SparkSQL代替Hive,更快的運行SQL。

使用Kafka完成數據的一次收集,多次消費架構。

自己可以寫程序完成Kafka的生產者和消費者。

從前面的學習,你已經掌握了大數據平台中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。

第七章:越來越多的分析任務

不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平台的中樞系統,類似於AppMaster,負責分配和監控任務。

7.1 Apache Oozie

Oozie是什麼?有哪些功能?

Oozie可以調度哪些類型的任務(程序)?

Oozie可以支持哪些任務觸發方式?

安裝配置Oozie。

7.2 其他開源的任務調度系統

Azkaban,light-task-scheler,Zeus,等等。另外,我這邊是之前單獨開發的任務調度與監控系統,具體請參考《大數據平台任務調度與監控系統》。

第八章:我的數據要實時

在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和准實時,絕對實時的延遲要求一般在毫秒級,准實時的延遲要求一般在秒、分鍾級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他准實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程序來做。

8.1 Storm

什麼是Storm?有哪些可能的應用場景?

Storm由哪些核心組件構成,各自擔任什麼角色?

Storm的簡單安裝和部署。

自己編寫Demo程序,使用Storm完成實時數據流計算。

8.2 Spark Streaming

什麼是Spark Streaming,它和Spark是什麼關系?

Spark Streaming和Storm比較,各有什麼優缺點?

使用Kafka + Spark Streaming,完成實時計算的Demo程序。

至此,你的大數據平台底層架構已經成型了,其中包括了數據採集、數據存儲與計算(離線和實時)、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提供數據了。

第九章:數據要對外

通常對外(業務)提供數據訪問,大體上包含以下方面。


離線:比如,每天將前一天的數據提供到指定的數據源(DB、FILE、FTP)等;離線數據的提供可以採用Sqoop、DataX等離線數據交換工具。

實時:比如,在線網站的推薦系統,需要實時從數據平台中獲取給用戶的推薦數據,這種要求延時非常低(50毫秒以內)。根據延時要求和實時數據的查詢需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。

OLAP分析:OLAP除了要求底層的數據模型比較規范,另外,對查詢的響應速度要求也越來越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的數據模型比較規模,那麼Kylin是最好的選擇。

即席查詢:即席查詢的數據比較隨意,一般很難建立通用的數據模型,因此可能的方案有:Impala、Presto、SparkSQL。

這么多比較成熟的框架和方案,需要結合自己的業務需求及數據平台技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。

8. Hive的幾種常見的數據導入方式

零.Hive的幾種常見的數據導入方式
常用的的有三種:
1.從本地文件系統中導入數據到Hive表;
2.從HDFS上導入數據到Hive表;
3.在創建表的時候通過從別的表中查詢出相應的記錄並插入到所創建的表中。
Hive配置:
HDFS中Hive數據文件存放目錄(啟動hive後HDFS自動創建):
HDFS: /usr/hive/warehouse
hadoop fs -mkdir /usr/hive/warehouse 命令創立
本地數據存放目錄:
本地:/home/santiago/data/hive
一.從本地文件系統中導入數據到Hive表
1.在hive中建表
hive> show databases;
OKdefaultTime taken: 1.706 seconds, Fetched: 1 row(s)
hive> create table guo_test(Name string,String string)
> row format delimited
> fields terminated by ','
> stored as textfile;
hive> show tables;
OK
guo_test
Time taken: 0.024 seconds, Fetched: 1 row(s)123456789101112

2.在本地文件建立同類型數據表
santi@hdp:~/data/hive$ ls
hive_test.txt
santi@hdp:~/data/hive$ cat hive_test.txt
santi,you are a zhazha.1234

3.導入數據並測試
hive>load data local inpath '/home/santi/data/hive/hive_test.txt' into table guo_test;
hive> select * from guo_test;
hive>dfs -ls /usr/hive/warehouse/guo_test;

#hadoop fs -ls /usr/hive/warehouse
Found 1 items
drwxrwxr-x - santiago supergroup 0 2017-01-14 21:13
/usr/hive/warehouse/guo_test12345678

發現hive-site,xml設置的HDFS文件存儲位置中多了guo_test這個文件夾
#hadoop fs -ls /usr/hive/warehouse/guo_test
Found 1 items-rwxrwxr-x 1 santiago supergroup 24 2017-01-14 21:13
/usr/hive/warehouse/guo_test/hive_test.txt

hive> select * from guo_test;
OK
santi you are a zhazha.12345678

在該文件夾中找到了所寫入hive數據倉庫的文件。
[注]本地數據寫入成功,但是從本地將數據導入到Hive表的過程中,其實是先將數據臨時復制到HDFS的一個目錄下(典型的情況是復制到上傳用戶的HDFS home目錄下,比如/home/santi/),然後再將數據從臨時目錄下移動到對應的Hive表的數據目錄裡面(臨時目錄不保留數據)。
二.從HDFS文件系統中導入數據到Hive表
1.在HDFS文件系統上建立數據文件
hdfs上沒有vim命令,則需要將本地數據文件手動傳入到HDFS上
/data/hive# vim data_HDtoHive/data/hive# cat data_HDtoHivedata from, HDFS to Hive #hadoop fs -put /home/santi/data/hive/data_HDtoHive /usr/data/input//數據傳入# hadoop fs -ls /usr/data/input12345

2導入數據
hive> load data inpath '/usr/data/input/data_HDtoHive' into table guo_test;
hive> select * from guo_test;
OK
data from HDFS to Hive
santi you are a zhazha.
Time taken: 0.172 seconds, Fetched: 2 row(s)123456

數據寫入成功
數據存hive配置的數據存儲位置中。
[注]
從本地導入數據語句為
hive>load data local inpath 『/home/santi/data/hive/hive_test.txt』 into table guo_test;
從HDFS中導入數據的語句為
hive> load data inpath 『/usr/data/input/data_HDtoHive』 into table guo_test;
差距在local這個命令這里。
而從HDFS系統上導入到Hive表的時候,數據轉移。HDFS系統上查找不到相關文件。
三.從HIVE表選取數據插入新的HIVE表
命令為create table 表名 as selecr xxx from 表名。
hive> create table hivedata_test1
> as
> select name
> from guo_test;
hive> select * from hivedata_test1;
OK
data fromsanti
Time taken: 0.116 seconds, Fetched: 2 row(s)123456789

[注]hive是分區表有稍微區別
在Hive中,表的每一個分區對應表下的相應目錄,所有分區的數據都是存儲在對應的目錄中。比表有a和b兩個分區,則對應a=xxx,b=xx對應表的目錄為/user/hive/warehouse/a=xxx
user/hive/warehouse/b=xx,所有屬於這個分區的數據都存放在這個目錄中。
hive> create table hivedata_test2(
> Name string)
> partitioned by
> (String string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','> STORED AS TEXTFILE;

hive> insert into table hivedata_test2
> partition(String='best')
> select Name
> from guo_test;
hive> select * from hivedata_test2;
OK
data from best
santi best
Time taken: 1.549 seconds, Fetched: 2 row(s)# hadoop fs -ls /usr/hive/warehouse/hivedata_test2Found 1 items
drwxrwxr-x -santiago supergroup 0 2017-02-14 17:40
/usr/hive/warehouse/hivedata_test2/string=best

9. Hive常用命令

參數說明:
EXTERNAL:創建外部表,在建表的同時可以指定源數據的路徑(LOCATION),創建內部表時,會將數據移動到數據倉庫指向的路徑,若創建外部表不會有任何改變。在刪除表時,內部表的元數據和源數據都會被刪除,外部表不會刪除源數據。

COMMENT:為表和列增加註釋

PARTITIONED BY:創建分區表,
——PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY:創建分桶表
SORTED BY:創建排序後分桶表(不常用)
——CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS

ROW FORMAT DELIMITED:是用來設置創建的表在載入數據的時候,支持的列分隔符。Hive默認的分隔符是\001,屬於不可見字元,這個字元在vi里是^A
—— ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001';

STORED AS:指定存儲文件類型 sequencefile (二進制序列文件)、textfile(文本)、rcfile(列式存儲格式文件)、ORC
如果文件數據是純文本,可以使用 STORED AS TEXTFILE。
如果數據需要壓縮,使用 STORED AS SEQUENCEFILE。

LOCATION:指定表在 hdfs 上的存儲位置

注意:若是外部表,則還需要刪除文件(hadoop fs -rm -r -f hdfspath)

注意:INPATH後面的文件路徑不能和hive表路徑在hdfs上一致,最好是兩個不同的文件路徑,在載入過程中,源路徑下的文件會被移動到hive表所在路徑下,如果一致,會找不到文件錯誤;

Hive支持內置和自定義開發的文件格式。以下是Hive內置的一些格式:

默認是文本格式.
textfile 存儲空間消耗比較大,並且壓縮的text 無法分割和合並查詢的效率最低,可以直接存儲,載入數據的速度最高.
sequencefile 存儲空間消耗最大,壓縮的文件可以分割和合並查詢效率高,需要通過text文件轉化來載入.
rcfile 存儲空間最小,查詢的效率最高 ,需要通過text文件轉化來載入,載入的速度最低.

相比傳統的行式存儲引擎,列式存儲引擎具有更高的壓縮比,更少的IO操作而備受青睞(註:列式存儲不是萬能高效的,很多場景下行式存儲仍更加高效),尤其是在數據列(column)數很多,但每次操作僅針對若干列的情景,列式存儲引擎的性價比更高。

10. 搭建hadoop集群,常用配置文件是什麼,以及配置哪些屬性

一. 簡介

參考了網上許多教程,最終把hadoop在ubuntu14.04中安裝配置成功。下面就把詳細的安裝步驟敘述一下。我所使用的環境:兩台ubuntu 14.04 64位的台式機,hadoop選擇2.7.1版本。(前邊主要介紹單機版的配置,集群版是在單機版的基礎上,主要是配置文件有所不同,後邊會有詳細說明)

二. 准備工作

2.1 創建用戶

創建用戶,並為其添加root許可權,經過親自驗證下面這種方法比較好。

1 sudo adser hadoop2 sudo vim /etc/sudoers3 # 修改內容如下:4 root ALL = (ALL)ALL5 hadoop ALL = (ALL)ALL

給hadoop用戶創建目錄,並添加到sudo用戶組中,命令如下:

1 sudo chown hadoop /home/hadoop2 # 添加到sudo用戶組3 sudo adser hadoop sudo

最後注銷當前用戶,使用新創建的hadoop用戶登陸。

2.2安裝ssh服務

ubuntu中默認是沒有裝ssh server的(只有ssh client),所以先運行以下命令安裝openssh-server。安裝過程輕松加愉快~

sudo apt-get install ssh openssh-server

2.3 配置ssh無密碼登陸

直接上代碼:執行完下邊的代碼就可以直接登陸了(可以運行ssh localhost進行驗證)

1 cd ~/.ssh# 如果找不到這個文件夾,先執行一下 "ssh localhost"2 ssh-keygen -t rsa3 cp id_rsa.pub authorized_keys

注意:

這里實現的是無密登陸自己,只適用與hadoop單機環境。如果配置Hadoop集群設置Master與Slave的SSH無密登陸可

三. 安裝過程

3.1 下載hadoop安裝包

有兩種下載方式:

1. 直接去官網下載:

2. 使用wget命令下載:

3.2 配置hadoop

1. 解壓下載的hadoop安裝包,並修改配置文件。我的解壓目錄是(/home/hadoop/hadoop-2.7.1),即進入/home/hadoop/文件夾下執行下面的解壓縮命令。

tar -zxvf hadoop-2.7.1.tar.gz

2. 修改配置文件:(hadoop2.7.1/etc/hadoop/)目錄下,hadoop-env.sh,core-site.xml,mapred-site.xml.template,hdfs-site.xml。

(1). core-site.xml 配置:其中的hadoop.tmp.dir的路徑可以根據自己的習慣進行設置。

至此,wordcount demo 運行結束。

六. 總結

配置過程遇到了很多問題,最後都一一解決,收獲很多,特此把這次配置的經驗分享出來,方便想要配置hadoop環境的各位朋友~

(Hadoop集群安裝配置過程基本和單機版是一樣的,主要是在配置文件方面有所區別,以及ssh無密登陸要求master和slave能夠互相無密登陸。

閱讀全文

與hdfs常用命令相關的資料

熱點內容
pdf卡片2004 瀏覽:307
e算量加密鎖檢測不到 瀏覽:774
python串口讀取數據類型 瀏覽:758
17年新款寶來壓縮機不跳 瀏覽:105
王者打著為什麼伺服器升級 瀏覽:847
aliyunlinux安裝 瀏覽:981
jdk8分層編譯 瀏覽:453
單片機脈沖計數程序 瀏覽:825
原相機文件夾名 瀏覽:330
淘寶雲伺服器靠什麼賺錢 瀏覽:136
單片機同步通信 瀏覽:259
游戲伺服器如何選 瀏覽:746
和平精英蘋果轉安卓怎麼轉不了 瀏覽:52
偉福單片機實驗箱 瀏覽:157
廣東加密貨幣 瀏覽:218
利用python批量查詢系統 瀏覽:499
什麼app看左右臉 瀏覽:305
台灣小公主s解壓密碼 瀏覽:570
易語言鎖機軟體源碼 瀏覽:159
迅雷下載完成無法解壓 瀏覽:592