hadoop2.6.5+sqoop1.4.6 환경 배치 및 테스트(3)

hadoop 환경 구축이 완료된 후에 다음은 squop을 통합시켜hadoop과 mysql-connector-java를 이용하여 MySQL에서 데이터를 추출하여hdfs에 저장할 수 있도록 하는 것이다.1. 획득할 squop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz는/usr/local/아래로 압축을 풀고/usr/local/sqoop 소프트 링크를 만듭니다.
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz /usr/local/
tar -xvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
ln -s /usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha /usr/local/sqoop

2./usr/local/sqoop,/usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha속 주속 그룹을hadoop으로 변경하여hadoop 사용자가 사용할 수 있도록 보증합니다.
chown -R hadoop:hadoop /usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
chown -R hadoop:hadoop /usr/local/sqoop

3. SQOOP 구성HOME 환경 변수/etc/profile에서 다음 레코드를 추가 및 수정합니다.
export SQOOP_HOME=/usr/local/sqoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin:$PATH

4. squop을 설정하여 Hadoop에 통합할 수 있음: 1) $SQOOP 에 입장HOME/conf 디렉터리에서 sqoop 환경 설정 스크립트 sqoop-env-template를 복사합니다.sh를 현재 디렉터리로 이동하고 sqoop-env로 이름을 바꿉니다.sh:
cd $SQOOP_HOME/conf
cp sqoop-env-template.sh sqoop-env.sh

2) squop-env를 수정합니다.sh의 HADOOPCOMMON_Home과 HADOOPMAPRED_HOME 변수 값은 해당 hadoop 파일 경로에 해당합니다.
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop/share/hadoop/mapreduce

3) sqoop은 mysql와 mapreduce 프로그램을 연결하여 데이터 추출을 완성해야 하기 때문에 mysql-connector와 mapreduce의 상응하는 라이브러리 파일 지원이 필요합니다. mysql-connector-java 패키지와 $HADOOPHOME/share/hadoop/mapreduce/아래의 모든jar 패키지를 $SQOOP 로 복사HOME/lib 디렉토리:
cp $HADOOP_HOME/share/hadoop/mapreduce/*.jar $SQOOP_HOME/lib/
cp ~/mysql-connector-java-5.1.32-bin.jar $SQOOP_HOME/lib/
chown -R hadoop:hadoop $SQOOP_HOME/lib/

5. 다음은 squop 스크립트를 사용하여 데이터 추출 작업을 진행할 수 있습니다. 이 스크립트는 $SQOOPHOME/bin 디렉토리에서 다음 방법을 사용합니다.
#           
sqoop list-databases --connect jdbc:mysql://localhost:3306/actionLog \
--username root --P (        ,     sqoop  mysql   )
# MySQL       hdfs 
sqoop import --connect jdbc:mysql://hadoop-test-nn:3306/actionLog  \
--username root -P \
--table log \
--columns "logger_id,time" \
--where 'action = "login"' \
--target-dir /test/loginInfo
    :
--username       
-P                   
--table         
--columns              
--where         sql   where          
--target-dir         hdfs    ,       hdfs    ,              

위의 sqoop import 명령은 mysql의 actionLog 라이브러리에 있는 log 테이블을 다음과 같이 추출하는 데이터 구조입니다.
mysql> desc log;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| log_id       | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name          | varchar(255) | YES  |     | NULL    |                |
| action       | varchar(255) | YES  |     | NULL    |                |
| logger_id    | varchar(255) | YES  |     | NULL    |                |
| time         | varchar(255) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

내보내기 열을 logger로 지정했기 때문에id、time.따라서 hdfs로 내보낸 데이터는 다음과 같습니다.
[hadoop@hadoop-test-nn lib]$ hdfs dfs -ls /test/loginInfo   
Found 1 items
-rw-r--r--   2 hadoop supergroup     211825 2017-08-02 16:04 /test/loginInfo/userLoginInfo.txt
[hadoop@hadoop-test-nn lib]$ hdfs dfs -cat /test/loginInfo/userLoginInfo.txt
wanger,2017-07-27 14:21:12
zhangsan,2017-07-27 14:37:16
james,2017-07-27 15:27:13
...

(주: 여기에서/test/login Info의 텍스트 내용을 통합하고 다시 저장했습니다. 실제 사용 과정에서 이 디렉터리에 part-** 형식으로 명명된 텍스트가 여러 개 생겨서 텍스트 내용의 형식이 일치합니다.) 현재 데이터는 성공적으로 추출되어 텍스트 방식으로hdfs에 저장되었습니다.다음은 mapreduce 프로그램을 작성해서 텍스트를 분석할 수 있습니다.

좋은 웹페이지 즐겨찾기