資料分析引擎:pig
---------------------------------
一、什麼是pig?安裝和配置
1、最早由yahoo開發,後來給apache
2、支援語句piglatin語句,類似sql
3、翻譯器:piglatin語句 ----> mapreduce
spark(從0.17開始支援)
4、安裝和配置
tar -zxvf pig-0.17.0.tar.gz -c ~/training/
設定環境變數
pig_home=/root/training/pig-0.17.0
export pig_home
path=$pig_home/bin:$path
export path
5、兩種模式
(1)本地模式:操作的是linux的檔案
pig -x local
日誌: connecting to hadoop file system at: file:///
(2)集群模式:鏈結到hdfs上
設定乙個環境變數: pig_classpath ----> hadoop的配置檔案所在的目錄
pig_classpath=$hadoop_home/etc/hadoop
export pig_classpath
pig日誌:connecting to hadoop file system at: hdfs://bigdata111:9000
二、pig的常用命令:操作hdfs
ls、cd、cat、mkdir、pwd
sh: 呼叫作業系統的命令
register、define -----> 部署pig的自定義函式的jar包
三、pig的資料模型(重要) ----> 表結構
tuple: 行 pig
apache storm是實時計算引擎
四、使用piglatin語句分析資料
1、需要啟動yarn的historyserver:記錄所有執行過的任務
2、常見的piglatin語句(注意:piglatin語句跟spark中運算元/方法非常像)
(*)load
載入資料到表(bag)
(*)foreach 相當於迴圈,對bag中每乙個行tuple進行處理
(*)f
ilter 過濾、相當於where
(*)group by 分組
(*)order by 排序
(*)join 鏈結
(*)generate 提取列
(*)union、intersect 集合運算
(*)輸出:dump 螢幕
store 儲存到檔案
注意:piglatin有些會觸發計算,有些不會
類似spark rdd 運算元(方法):transformation方法(運算元) -----> 不會觸發計算
action方法(運算元) ------> 會觸發spark的計算
3、使用piglatin語句
7499,allen,salesman,7698,1981/2/20,1600,300,30
(1)建立員工表 emp
emp = load '/scott/emp.csv';
檢視表結構
describe emp;
schema for emp unknown
(2)建立表,指定schema(結構)
emp = load '/scott/emp.csv' as(empno,ename,job,mgr,hiredate,sal,comm,deptno);
預設的列的型別:bytearray
預設的分隔符:製表符
最終版:
emp = load '/scott/emp.csv' using pigstorage(',') as(empno:int,ename:chararray,job:chararray,mgr:int,hiredate:chararray,sal:int,comm:int,deptno:int);
再建立部門表
10,accounting,new york
dept = load '/scott/dept.csv' using pigstorage(',') as(deptno:int,dname:chararray,loc:chararray);
(3)查詢員工資訊:員工號 姓名 薪水
sql: select empno,ename,sal from emp;
pl: e*** = foreach emp generate empno,ename,sal; ----> 不會觸發計算
dump e***;
(4)查詢員工資訊,按照月薪排序
sql: select * from emp order by sal;
pl: emp4 = order emp by sal;
dump emp4;
(5)分組:求每個部門的最高工資: 部門號 部門的最高工資
sql: select deptno,max(sal) from emp group by deptno;
pl: 第一步:先分組
emp51 = group emp by deptno;
檢視emp51的表結構
emp51: }
dump emp51;
資料group emp
(10,)
(20,)
(30,)
第二步:求每個組(每個部門)工資的最大值
注意:max大寫
emp52 = foreach emp51 generate group,max(emp.sal)
(6)查詢10號部門的員工
sql: select * from emp where deptno=10;
pl: emp6 = filter emp by deptno==10; 注意:兩個等號
(7)多表查詢:部門名稱、員工姓名
sql: select d.dname,e.ename from emp e,dept d where e.deptno=d.deptno;
pl: emp71 = join dept by deptno,emp by deptno;
emp72 = foreach emp71 generate dept::dname,emp::ename;
(8)集合運算:
查詢10和20號部門的員工資訊
sql: select * from emp where deptno=10
union
select * from emp where deptno=20;
注意:oracle中,是否任意的集合都可以參與集合運算?
參與集合運算的各個集合,必須列數相同、且型別一致
select deptno,job,sum(sal) from emp group by deptno,job
union
select deptno,to_char(null),sum(sal) from emp group by deptno
union
select to_number(null),to_char(null),sum(sal) from emp;
pl: emp10 = filter emp by deptno==10;
emp20 = filter emp by deptno==20;
emp1020 = union emp10,emp20;
(9)執行wordcount
① 載入資料
mydata = load '/input/data.txt' as (line:chararray);
② 將字串分割成單詞
words = foreach mydata generate flatten(tokenize(line)) as word;
③ 對單詞進行分組
grpd = group words by word;
④ 統計每組中單詞數量
cntd = foreach grpd generate group,count(words);
⑤ 列印結果
dump cntd;
注意:後面的操作依賴前面的操作,類似spark的rdd(依賴關係)
五、pig的自定義函式:3種 ---> 打成jar包
依賴的jar
/root/training/pig-0.14.0/pig-0.14.0-core-h2.jar
/root/training/pig-0.14.0/lib
/root/training/pig-0.14.0/lib/h2
/root/training/hadoop-2.4.1/share/hadoop/common
/root/training/hadoop-2.4.1/share/hadoop/common/lib
1、自定義的運算函式: 根據員工的薪水,判斷薪水的級別
2、自定義的過濾函式: 查詢薪水大於2000的員工
emp11 = filter emp by pig.issalaryto0high(sal);dump emp11;(執行)
3、自定義的載入函式(最麻煩)
還需要mr的jar包
註冊jar包
register /root/temp/pigfunc.jar
(define 建立別名
define myloadfunc pig.myloadfunction;)
mydemo = load '/input/data.txt' using pig.myloadfunction();(執行)
dump mydemo;
Pig語言的學習
pig 是基於hadoop並行資料流語言 pig 輸入輸出 第一步 載入load 最後執行完資料流之後可以可以 store 儲存 或 dump輸出到螢幕 pig 關係操作 foreach 對於每一條記錄,可以選擇相應的字段,傳給下乙個操作符 相當於sql中選擇需要的列,可以進行count和sum操作...
總結 Pig的安裝部署
tar zxvf pig 0.17.0.tar.gz c 2 建立軟鏈結 ln s pig 0.17.0 pigvi bashrc在檔案末尾加上這兩行 export pig home home 使用者名稱 pig 0.17.0 export path pig home bin path 1 本地模式...
初學MongoDB的筆記
建立資料庫名字 use name 檢視建立的資料庫 show dbs 剛建立的資料庫,直接檢視,並不會檢查到。需要像資料庫新增檔案 插入檔案到新建的資料庫 db.name.insert 再次使用show dbs 就可以查詢到剛建立的新的資料庫了。刪除資料庫,使用use name 進入使用 db dr...