일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 불순도제거
- count
- 순위출력
- 데이터분석
- 그래프 생성 문법
- 빅데이터
- 단순회귀 분석
- 여러 데이터 검색
- Intersect
- sql
- 회귀분석 알고리즘
- 데이터분석가
- sqld
- 상관관계
- merge
- 히스토그램 그리기
- 빅데이터분석
- 막대그래프
- 팀스파르타
- 총과 카드만들기
- 정보획득량
- Dense_Rank
- if문 작성법
- 그래프시각화
- difftime
- loop 문
- 회귀분석
- Sum
- %in%
- max
- Today
- Total
ch0nny_log
[빅데이터분석] Linux_7.스파크 설치 및 운영 본문
※ 스파크(Spark) 설치
스파크(spark) 란 ?
hive 의 단점을 개선하기 위해서 나온게 스파크입니다.
hive 가 자바를 몰라도 하둡 분산 파일 시스템에 있는 데이터를 SQL로 조회할 수 있게 facebook 에서 만든 noSQL 입니다.
hive 의 단점이 disk 에서 데이터를 처리하기 때문에 속도가 너무 느립니다.
스파크는 메모리(memory) 에서 데이터를 처리해서 속도가 아주 빠릅니다.
요즘 하드웨어 성능이 좋아지고 있고 메모리 가격도 예전에 비해서 저렴해져서 스파크(spark) 사용이 대중화가 되고 있습니다.
■ 스파크(spark)의 특징 ?
1. 메모리 기반의 데이터 처리로 속도가 아주 빠릅니다.
2. 하둡의 hdfs 를 이용할 수도 있고 또는 단독으로 사용이 가능합니다.
3. 파이썬과 연동을 해서 다양한 파이썬 패키지를 사용할 수 있습니다.
■ 스파크 설치
■ 스파크 설치 총정리
1. oracle 의 홉디렉토리로 이동합니다.
(base) [oracle@centos ~]$ cd
2. 설치 파일을 다운로드 받는다.
(base) [oracle@centos ~]$ wget https://archive.apache.org/dist/spark/spark-2.0.2/spark-2.0.2-bin-hadoop2.7.tgz
3. 압축을 풉니다.
(base) [oracle@centos ~]$ tar xvzf spark-2.0.2-bin-hadoop2.7.tgz
4. 압축을 풀고 생긴 디렉토리의 이름을 spark 로 변경합니다.
(base) [oracle@centos ~]$ mv spark-2.0.2-bin-hadoop2.7 spark
5. .bash_profile 를 열어서 맨 아래에 아래의 export 문을 입력합니다.
(base) [oracle@centos ~]$ vi .bash_profile
export PATH=$PATH:/home/oracle/spark/bin:$PATH
-> 한줄 위 기입
6. .bash_profile 을 수행합니다.
(base) [oracle@centos ~]$ source .bash_profile
7. spark-shell 로 접속하여 테이블 생성을 하고 select 합니다.
(base) [oracle@centos ~]$ spark-shell
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
21/01/09 08:54:43 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
21/01/09 08:54:43 WARN Utils: Your hostname, localhost.localdomain resolves to a loopback address: 127.0.0.1; using 10.0.2.15 instead (on interface enp0s3)
21/01/09 08:54:43 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
21/01/09 08:54:45 WARN SparkContext: Use an existing SparkContext, some configuration may not take effect.
Spark context Web UI available at http://10.0.2.15:4040
Spark context available as 'sc' (master = local[*], app id = local-1610200485296).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.0.2
/_/
Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_262)
Type in expressions to have them evaluated.
Type :help for more information.
문제1. emp.csv 를 emp2.csv 로 copy 하시오 !
$ cp emp.csv emp2.csv
문제2. emp2.csv 의 맨위에 컬럼명들을 지우시오 !
$ vi emp2.csv
문제3. emp2.csv 에서 kkkk 를 SALESMAN 으로 변경하시오 !
:%s/kkkk/SALESMAN/g
문제4. 스파크에서 emp 테이블 생성 스크립트를 생성하시오 !
#1. hive 의 SQL을 스파크에서 사용할 수 있도록 설정합니다.
HIVE 가 자바를 몰라도 하둡에 있는 빅데이터를 조회할 수 있게해주는 프로그램
monogdb 는 SQL과 완전히 달랐지만 Hive 와 spark 는 SQL로 데이터를 검색할 수
있습니다. SQL --> JAVA 로 변경합니다.
scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
#2. 스파크에서 emp 테이블을 생성합니다.
scala> sqlContext.sql("""drop table if exists emp""") scala> sqlContext.sql(""" create table emp ( empno int, ename string, job string, mgr int, hiredate string, sal int, comm int, deptno int ) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile """ ) res5: org.apache.spark.sql.DataFrame = [] <--- 잘 되었다는 뜻입니다. scala> spark.sql("show tables").show()
#3. /home/oracle 밑에 있는 emp2.csv 를 스파크에 emp 테이블에 입력하시오 !
scala> sqlContext.sql(""" LOAD DATA LOCAL INPATH '/home/oracle/emp2.csv' into table emp """)
더블 쿼테이션 마크를 3개를 쓰게 되면 편하게 여러줄로 작성할 수 있습니다.
res8: org.apache.spark.sql.DataFrame = []
문제5. 스파크에서 계속 에러만 나고 아무리 제대로 명령어를 써도 자꾸 에러가 난다면?
#1. 스파크를 종료합니다. ctl키 + d #2. jps 명령어를 리눅스 운영체제에서 수행합니다. 3596 Jps 11243 SecondaryNameNode 10910 NameNode 11338 JobTracker 32617 SparkSubmit <------------- 이걸 죽여야합니다. 11069 DataNode 11498 TaskTracker #3. 프로세서 번호로 죽입니다. $ kill -9 32617 #4. 스파크에 접속합니다. $ spark-shell #5. 테이블 목록을 확인합니다. scala> spark.sql("show tables").show()
문제6. emp 테이블을 조회합니다.
scala> sql(""" select * from emp """).show()
문제7. 직업이 SALESMAN 인 사원들의 이름과 월급과 직업을 출력하시오 !
scala> sql(""" select ename, sal, job from emp where job='SALESMAN' """).show()
문제8. dept.csv 를 이용해서 스파크에서 dept 테이블을 생성하시오 !
sql(""" create table dept ( deptno int, dname string, loc string ) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile """); sql("""LOAD DATA LOCAL INPATH '/home/oracle/dept.csv' into table dept"""); sql(""" select * from dept """).show()
문제9. 직업, 직업별 토탈월급을 출력하시오 !
scala> sql(""" select job, sum(sal) from emp group by job """).show()
문제10. 위의 결과를 csv 파일로 생성하시오 !
scala> val df = spark.sql(""" select job, sum(sal) as total_sal from emp group by job """) scala> df.coalesce(1).write.option("header", "true").csv("/home/oracle/emp_job_result2.csv")
문제11. 하이브는 서브쿼리를 지원하지 않는데 스프크는 서브쿼리를 지원하는지 다음의 문제를 풀어보시오. 사원 테이블에서 월급의 순위가 2등인 사원의 이름과 월급과 순위를 출력하시오.
sql(""" select * from ( select ename, sal, rank() over ( order by sal desc ) as rnk from emp ) where rnk = 2 """).show()
설명: from 절의 서브쿼리가 사용가능 합니다.
문제12. (오라클과 스파크의 차이점1) 이름과 커미션을 출력하는데 커미션이 null 인 사원들은 0 으로 출력하시오 !
Oracle> select ename, nvl(comm,0) from emp; Spark> sql(""" select ename, coalesce( comm, 0 ) from emp """).show()
문제13. (오라클과 Spark의 차이점2) 1981 년도에 입사한 사원들의 이름과 입사일을 출력하시오!
Oracle> select ename, hiredate from emp where to_char(hiredate,'RRRR') = '1981'; Spark> sql("""select ename, hiredate from emp where date_format(hiredate,'yyyy')='1981' """).show()
문제14. (오라클과 Spark의 차이점2) emp 테이블의 SCOTT 의 월급을 0 로 변경하시오!
scala>sql(""" update emp set sal = 0 where ename='SCOTT' """).show()
설명: 스파크는 update 를 할 수 없습니다. delete, insert 전부 안됩니다.
몽고디비는 가능합니다.
문제15. (오라클과 스파크의 차이점) emp 와 dept 를 조인해서 이름과 부서위치를 출력하시오 !
scala> sql(""" select e.ename, d.loc from emp e join dept d on ( e.deptno = d.deptno) """).show()
문제16. (오라클과 스파크의 차이점) 부서위치, 부서위치별 토탈월급을 출력하시오!
Oracle> select loc, sum(sal) from dept group by rollup(loc); Spark> sql(""" select loc, sum(sal) as sumsal from dept group by loc with rollup order by isnull(loc) asc """).show()
문제17. ( 오라클과 스파크의 차이점) 직업, 직업별 토탈월급을 출력하는데 맨 아래에 전체 토탈월급이 출력되게 하시오 !
Oracle> select job, sum(sal) from emp group by rollup(job); Spark> sql(""" select job, sum(sal) as sumsal from emp group by job with rollup order by isnull(job) asc """).show()
문제18. 아래의 오라클 SQL을 Spark 로 구현하시오 !
Oracle> select deptno, sum(sal) from emp group by cube(deptno); Spark> sql(""" select deptno, sum(sal) as sumsal from emp group by deptno with rollup order by isnull(deptno) desc""").show()
문제19. 아래의 오라클 SQL을 Spark 로 구현하시오 !
Oracle> select deptno, job, sum(sal) as sumsal from emp group by grouping sets( deptno, job , () ); Spark> sql(""" select deptno, job, sum(sal) as sumsal from emp group by deptno, job grouping sets( deptno, job, () ) order by deptno, job """).show()
문제 20 아래의 오라클 SQL을 Spark 로 구현하시오 !
Oracle> select deptno, sum(sal) from emp group by grouping sets( deptno, () ); Spark> sql(""" select deptno, sum(sal) as sumsal from emp group by deptno grouping sets( deptno, () ) order by isnull(deptno) asc """).show()
1. 리눅스를 정상적으로 종료합니다.
vm 박스 터미널 (root 에서)
$ su -
# init 0
2. 오라클 vm 박스에서 가상환경 centos의 설정을 누르고 네트워크를 설정함
설명: nat 네트워크 : 인터넷을 하기 위한 네트워크 / 호스트 전용 어뎁터 : 윈도우에서 vm 리눅스에 접속하기 위한 네트워크
3. 네트워크1, 네트워크 2가있는데 네트워크1은 체크가 되어 있는데 네트워크 2가 활성화가 안되어 있음
1) 네트워크2활성화 시킴
2) 호스트 전용 어댑터로 둠(나만 접속가능)
3) 어댑터1 ->고급->포트포워딩 비우기
4. 루트로 다시실행
putty로 접속해 위 아이피 접속
'빅데이터 분석(with 아이티윌) > 리눅스' 카테고리의 다른 글
[빅데이터분석] Linux_10. 리눅스 & 하둡 최신 버전 설치 (24.09.30) (0) | 2024.09.30 |
---|---|
[빅데이터분석] Linux_6. 몽고 디비(mongo db) 설치 및 운영관리 (1) | 2024.09.24 |
[빅데이터분석] Linux_5. 하둡 설치 (0) | 2024.09.23 |
[빅데이터분석] Linux_3. 리눅스함수 및 centos에 아나콘다 ,workbench 설치 (0) | 2024.09.23 |
[빅데이터분석] Linux_2. 리눅스 함수 및 maria db 설치 (0) | 2024.09.23 |