day12Flume、azkaban、sqoop

1.PS:Hive中好少有update這個方法,由於他主要是用來批量數據的處理分析。php

2.PS:軟鏈接和硬鏈接的區別java

軟鏈接就是咱們普通和Windows系統同樣的快捷方式,她也是一個文件node

硬鏈接就是他是一個inode,對文件會有引用,刪除這個快捷方式不會刪除文件。mysql

3.pig其實和hive同樣,只不過hive有本身的語法,pig還要專門學習他的東西,通用性不太強。web

--------------------------------------------------------------------------------------------------------sql

PS:這是過幾天要寫的一個項目:數據庫

     首先對日誌文件進行收集,使用flume,第二部進行數據清理;傳入hive庫;進入mysql,最好進行數據展現apache

 

---------------------------------------------------------------------------------------------------瀏覽器

 

1.1.2 運行機制

一、 Flume分佈式系統中最核心的角色是agentflume採集系統就是由一個個agent所鏈接起來造成服務器

二、 每個agent至關於一個數據傳遞員,內部有三個組件:

   a) Source:採集源,用於跟數據源對接,以獲取數據 

   b) Sink:下沉地,採集數據的傳送目的,用於往下一級agent傳遞數據或者往最終存儲系統傳遞數據

    c) Channelangent內部的數據傳輸通道,用於從source將數據傳遞到sink

PS:一個agent就是一個進程

1. 簡單結構 :單個agent採集數據

2. 複雜結構:多級agent之間串聯

 

-----------------------------------

1.2.1 Flume的安裝部署

一、Flume的安裝很是簡單,只須要解壓便可,固然,前提是已有hadoop環境

上傳安裝包到數據源所在節點上

而後解壓  tar -zxvf apache-flume-1.6.0-bin.tar.gz

而後進入flume的目錄,修改conf下的flume-env.sh,在裏面配置JAVA_HOME

 

2、根據數據採集的需求配置採集方案,描述在配置文件中(文件名可任意自定義)

3指定採集方案配置文件,在相應的節點上啓動flume agent

---------Step-演示將採集到數據顯示到控制檯上

1.解壓文件到apps中

 

2.到conf文件下,建立配置測試文件,不一樣的文件不同

2  、  啓動agent去採集數據

bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1  -Dflume.root.logger=INFO,console

-c conf   指定flume自身的配置文件所在目錄

-f conf/netcat-logger.con  指定咱們所描述的採集方案

-n a1  指定咱們這個agent的名字

TelNet就行輸入,測試;這裏數據和顯示不在一塊兒,現實生活中不會是這樣的

-------------------------監視文件夾方法

 1.先建立一個文件夾

2.在conf中建立文件

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
#監聽目錄,spoolDir指定目錄, fileHeader要不要給文件夾前墜名
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/hadoop/flumespool
a1.sources.r1.fileHeader = true

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

3.監視文件夾

啓動命令:
bin/flume-ng agent -c ./conf -f ./conf/spool-logger.conf -n a1 -Dflume.root.logger=INFO,console

---------------------------------------------------------------

測試

1.往/home/hadoop/flumeSpool放文件(mv ././xxxFile /home/hadoop/flumeSpool),可是不要在裏面生成文件

2.  移入文件之後,根據移入的文件    響應的文件中的內容

 

 

PS:將數據移入後會自動變爲completed,會監視文件夾的數據。最好是將生成的數據放入文件夾,文件夾的名字不能重名

------------------------------------------多級Agent串聯

 

PS:具體的操做我沒有去實現,主要就是
1.將bee1的flume配置發給bee2,分別配置 相印的配置文件,
2.不停的在配置文件中指定的位置打印 數據
3.而後在bee2中出結果

工做流調度器azkaban----------------他是一種服務

 

2.1.3 常見工做流調度系統

市面上目前有許多工做流調度器

hadoop領域,常見的工做流調度器有Oozie, Azkaban,Cascading,Hamake等

 

 -----------------------------------------------Azkaban 配置步驟

1.建立一個azkaban的文件夾,解壓文件

2.azkaban腳本導入

將解壓後的mysql 腳本,導入到mysql:

進入mysql

mysql> create database azkaban;

mysql> use azkaban;

Database changed

mysql> source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;

3.建立SSL配置(由於傳輸協議使用的是https,因此須要這一步操做)

參考地址: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA

運行此命令後,會提示輸入當前生成 keystor的密碼及相應信息,輸入的密碼請勞記,信息以下:

 

輸入keystore密碼: 

再次輸入新密碼:

您的名字與姓氏是什麼?

  [Unknown]: 

您的組織單位名稱是什麼?

  [Unknown]: 

您的組織名稱是什麼?

  [Unknown]: 

您所在的城市或區域名稱是什麼?

  [Unknown]: 

您所在的州或省份名稱是什麼?

  [Unknown]: 

該單位的兩字母國家代碼是什麼

  [Unknown]:  CN

CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正確嗎?

  [否]:  y

 

輸入<jetty>的主密碼

        (若是和 keystore 密碼相同,按回車): 

再次輸入新密碼:

完成上述工做後,將在當前目錄生成 keystore 證書文件,將keystore 考貝到 azkaban web服務器根目錄中.如:cp keystore azkaban/server

4.  配置文件--------------------統一時間

注:先配置好服務器節點上的時區

一、先生成時區配置文件Asia/Shanghai,用交互式命令 tzselect 便可

二、拷貝該時區文件,覆蓋系統本地時區配置

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  

而後對全部的機器執行該操做

 

3.修改配置文件,下面是配置郵件地址,複製收發郵件。暫時先不配

--------------------------------------------------------------------

PS:這裏是修改Server的配置

 

PS:web服務器的配置

 PS:修改excutor

啓動

web服務器

在azkaban web服務器目錄下執行啓動命令

bin/azkaban-web-start.sh

注:在web服務器根目錄運行

或者啓動到後臺

nohup  bin/azkaban-web-start.sh  1>/tmp/azstd.out  2>/tmp/azerr.out &

 

執行服務器

在執行服務器目錄下執行啓動命令

bin/azkaban-executor-start.sh

注:只能要執行服務器根目錄運行

 

 

啓動完成後,在瀏覽器(建議使用谷歌瀏覽器)中輸入https://服務器IP地址:8443 ,便可訪問azkaban服務了.在登陸中輸入剛纔新的戶用名及密碼(admin),點擊 login.

 

--------------------------------------------------------------------------------------------------------------------------------

2.4 Azkaban實戰

PS:由於Azkaba最好執行command命令,由於jar包不太經常使用

Azkaba內置的任務類型支持commandjava

 

Command類型單一job示例

一、建立job描述文件

vi command.job

#command.job

type=command                                                    

command=echo 'hello'

 

 

二、job資源文件打包成zip文件

zip command.job

 

 

三、經過azkabanweb管理平臺建立project並上傳job壓縮包

首先建立project

 

 

上傳zip

 

 

4啓動執行該job

PS:在執行命令以前,也有調度執行,仍是當即執行。爲了測試,咱們選擇當即執行。

 

 

 PS:後面還有一些例子,沒有作。

 PS:若是提交文件之後,執行的什麼都是正確的,就是 運行錯誤,可能文件格式沒有保存成UTF-8

----------------------------------------------------------------------------------------------------------------------------------------------------

3. sqoop數據遷移

3.1 概述

sqoopapache旗下一款Hadoop和關係數據庫服務器之間傳送數據」的工具。

導入數據MySQLOracle導入數據到HadoopHDFSHIVEHBASE等數據存儲系統;

導出數據:Hadoop的文件系統中導出數據到關係數據庫

 

3.2 工做機制

導入或導出命令翻譯成mapreduce程序來實現

在翻譯出的mapreduce中主要是對inputformatoutputformat進行定製

 3.3 sqoop實戰及原理

3.3.1 sqoop安裝

安裝sqoop的前提是已經具有javahadoop的環境

1、下載並解壓

PS: 解壓並修改文件夾名

PS:到sqoop文件夾下修改   配置文件的名字

PS:編輯sqoop-env.sh

PS:從hive中拷貝文件,而後啓動

PS:導入數據,從mysql導入hdfs;

------------------------------------本身修改查找數據庫進行sqoop

bin/sqoop import   \

--connect jdbc:mysql://localhost:3306/azkaban   \

--username root  \

--password root   \

--table project_files   \

--m 1  

 

 

---------------------

PS:若是沒有指定數據的位置,那麼導入的數據就放在其就默認放在HADOOP_HOME/bin/hadoop    (導入:從mysql到hdfs)

爲了驗證在HDFS導入的數據,請使用如下命令查看導入的數據

$ HADOOP_HOME/bin/hadoop fs -cat /user/hadoop/emp/part-m-00000

 -------------------------------------------

 

3.5 Sqoop的數據導出(須要在mysql端手動的建立庫表)

將數據從HDFS導出到RDBMS數據庫

導出前,目標表必須存在於目標數據庫中。

默認操做是從將文件中的數據使用INSERT語句插入到表中

更新模式是生成UPDATE語句更新表數據

語法

如下是export命令語法。

$ sqoop export (generic-args) (export-args)

 

 

示例

數據是在HDFS 「EMP/」目錄的emp_data文件中。所述emp_data以下

1201, gopal,     manager, 50000, TP

1202, manisha,   preader, 50000, TP

1203, kalil,     php dev, 30000, AC

1204, prasanth,  php dev, 30000, AC

1205, kranthi,   admin,   20000, TP

1206, satish p,  grp des, 20000, GR

 

1、首先須要手動建立mysql中的目標表

$ mysql

mysql> USE db;

mysql> CREATE TABLE employee (

   id INT NOT NULL PRIMARY KEY,

   name VARCHAR(20),

   deg VARCHAR(20),

   salary INT,

   dept VARCHAR(10));

 

2、而後執行導出命令

bin/sqoop export \

--connect jdbc:mysql://hdp-node-01:3306/test \

--username root \

--password root \

--table employee \

--export-dir /user/hadoop/emp/

 

3驗證表mysql命令行。

mysql>select * from employee;

若是給定的數據存儲成功,那麼能夠找到數據在以下的employee表。

+------+--------------+-------------+-------------------+--------+

| Id   | Name         | Designation | Salary            | Dept   |

+------+--------------+-------------+-------------------+--------+

| 1201 | gopal        | manager     | 50000             | TP     |

| 1202 | manisha      | preader     | 50000             | TP     |

| 1203 | kalil        | php dev     | 30000               | AC     |

| 1204 | prasanth     | php dev     | 30000             | AC     |

| 1205 | kranthi      | admin       | 20000             | TP     |

| 1206 | satish p     | grp des     | 20000             | GR     |

+------+--------------+-------------+-------------------+--------+

相關文章
相關標籤/搜索