RHadoop环境搭建

阅读导读:

1.如何搭建RHadoop开发环境?

2.搭建RHadoop和Hadoop环境搭建的区别?

3.如何执行rmr2任务?

4.hadoop命令与RHadoop命令有哪些区别?

环境准备

首先环境准备,这里我选择了Linux Ubuntu操作系统12.04的64位版本,大家可以根据自己的使用习惯选择顺手的Linux。

但JDK一定要用Oracle SUN官方的版本,请从官网下载,操作系统的自带的OpenJDK会有各种不兼容。JDK请选择1.6.x的版本,JDK1.7版本也会有各种的不兼容情况。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Hadoop的环境安装,相信大家都已经学会了。R语言请安装2.15以后的版本,2.14是不能够支持RHadoop的。

如果你也使用Linux Ubuntu操作系统12.04,请先更新软件包源,否则只能下载到2.14版本的R。

1. 操作系统Ubuntu 12.04 x64

~ uname -a

Linux domU-00-16-3e-00-00-85 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2 JAVA环境

~ java -version

java version "1.6.0_29"

Java(TM) SE Runtime Environment (build 1.6.0_29-b11)

Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)

3 HADOOP环境(这里只需要hadoop)

hadoop-1.0.3  hbase-0.94.2  hive-0.9.0  pig-0.10.0  sqoop-1.4.2  thrift-0.8.0  zookeeper-3.4.4

4 R的环境

R version 2.15.3 (2013-03-01) -- "Security Blanket"

Copyright (C) 2013 The R Foundation for Statistical Computing

ISBN 3-900051-07-0

Platform: x86_64-pc-linux-gnu (64-bit)

4.1 如果是Ubuntu 12.04,请更新源再下载R2.15.3版本

sh -c "echo deb http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntu precise/ >>/etc/apt/sources.list"

apt-get update

apt-get install r-base

RHadoop安装

RHadoop是RevolutionAnalytics的工程的项目,开源实现代码在GitHub社区可以找到。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapReduce, HDFS, HBase
三个部分。由于这三个库不能在CRAN中找到,所以需要自己下载。

https://github.com/RevolutionAnalytics/RHadoop/wiki

接下我们需要先安装这三个库的依赖库。

首先是rJava,配置好JDK1.6的环境,运行R CMD javareconf命令,R的程序从系统变量中会读取Java配置。然后打开R程序,通过install.packages的方式,安装rJava。

然后,我还要安装其他的几个依赖库,reshape2,Rcpp,iterators,itertools,digest,RJSONIO,functional,通过install.packages都可以直接安装。

接下安装rhdfs库,在环境变量中增加 HADOOP_CMD 和 HADOOP_STREAMING 两个变量,可以用export在当前命令窗口中增加。但为下次方便使用,最好把变量增加到系统环境变更/etc/environment文件中。再用 R CMD
INSTALL安装rhdfs包,就可以顺利完成了。

安装rmr库,使用R CMD INSTALL也可以顺利完成了。

最后,我们可以查看一下,RHADOOP都安装了哪些库。

由于我的硬盘是外接的,使用mount和软连接(ln -s)挂载了R类库的目录,所以是R的类库在/disk1/system下面

/disk1/system/usr/local/lib/R/site-library/

一般R的类库目录是/usr/lib/R/site-library或者/usr/local/lib/R/site-library,用户也可以使用whereis R的命令查询,自己电脑上R类库的安装位置

1.
下载RHadoop相关的3个程序包

https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads

rmr-2.1.0

rhdfs-1.0.5

rhbase-1.1

2.
复制到/root/R目录

~/R# pwd

/root/R

~/R# ls

rhbase_1.1.tar.gz  rhdfs_1.0.5.tar.gz  rmr2_2.1.0.tar.gz

3.
安装依赖库

命令行执行

~ R CMD javareconf

~ R

启动R程序

install.packages("rJava")

install.packages("reshape2")

install.packages("Rcpp")

install.packages("iterators")

install.packages("itertools")

install.packages("digest")

install.packages("RJSONIO")

install.packages("functional")

4.
安装rhdfs库

~ export HADOOP_CMD=/root/hadoop/hadoop-1.0.3/bin/hadoop

~ export HADOOP_STREAMING=/root/hadoop/hadoop-1.0.3/contrib/streaming/hadoop-streaming-1.0.3.jar (rmr2会用到)

~ R CMD INSTALL /root/R/rhdfs_1.0.5.tar.gz

4.1
最好把HADOOP_CMD设置到环境变量

~ vi /etc/environment

HADOOP_CMD=/root/hadoop/hadoop-1.0.3/bin/hadoop

HADOOP_STREAMING=/root/hadoop/hadoop-1.0.3/contrib/streaming/hadoop-streaming-1.0.3.jar

. /etc/environment

5.
安装rmr库

~  R CMD INSTALL rmr2_2.1.0.tar.gz

6.
所有的安装包

~ ls /disk1/system/usr/local/lib/R/site-library/

digest  functional  iterators  itertools  plyr  Rcpp  reshape2  rhdfs  rJava  RJSONIO  rmr2  stringr

RHadoop程序用例

文字说明部分:

安装好rhdfs和rmr两个包后,我们就可以使用R尝试一些hadoop的操作了。

首先,是基本的hdfs的文件操作。

查看hdfs文件目录

hadoop的命令:hadoop fs -ls /user

R语言函数:hdfs.ls(”/user/“)

查看hadoop数据文件

hadoop的命令:hadoop fs -cat /user/hdfs/o_same_school/part-m-00000

R语言函数:hdfs.cat(”/user/hdfs/o_same_school/part-m-00000″)

接下来,我们执行一个rmr算法的任务

普通的R语言程序:

> small.ints = 1:10

> sapply(small.ints, function(x) x^2)

MapReduce的R语言程序:

> small.ints = to.dfs(1:10)

> mapreduce(input = small.ints, map = function(k, v) cbind(v, v^2))

> from.dfs("/tmp/RtmpWnzxl4/file5deb791fcbd5")

因为MapReduce只能访问HDFS文件系统,先要用to.dfs把数据存储到HDFS文件系统里。MapReduce的运算结果再用from.dfs函数从HDFS文件系统中取出。

第二个,rmr的例子是wordcount,对文件中的单词计数

> input<- ‘/user/hdfs/o_same_school/part-m-00000‘

> wordcount = function(input, output = NULL, pattern = " "){

wc.map = function(., lines) {

keyval(unlist( strsplit( x = lines,split = pattern)),1)

}

wc.reduce =function(word, counts ) {

keyval(word, sum(counts))

}

mapreduce(input = input ,output = output, input.format = "text",

map = wc.map, reduce = wc.reduce,combine = T)

}

> wordcount(input)

> from.dfs("/tmp/RtmpfZUFEa/file6cac626aa4a7")

我在HDFS上提前放置了数据文件/user/hdfs/o_same_school/part-m-00000。写wordcount的MapReduce函数,执行wordcount函数,最后用from.dfs从HDFS中取得结果。

代码部分:

1.
rhdfs包的使用

启动R程序

> library(rhdfs)

Loading required package: rJava

HADOOP_CMD=/root/hadoop/hadoop-1.0.3/bin/hadoop

Be sure to run hdfs.init()

> hdfs.init()

1.1
命令查看hadoop目录

~ hadoop fs -ls /user

Found 4 items

drwxr-xr-x   - root supergroup          0 2013-02-01 12:15 /user/conan

drwxr-xr-x   - root supergroup          0 2013-03-06 17:24 /user/hdfs

drwxr-xr-x   - root supergroup          0 2013-02-26 16:51 /user/hive

drwxr-xr-x   - root supergroup          0 2013-03-06 17:21 /user/root

1.2
rhdfs查看hadoop目录

> hdfs.ls("/user/")

permission owner      group size          modtime        file

1 drwxr-xr-x  root supergroup    0 2013-02-01 12:15 /user/conan

2 drwxr-xr-x  root supergroup    0 2013-03-06 17:24  /user/hdfs

3 drwxr-xr-x  root supergroup    0 2013-02-26 16:51  /user/hive

4 drwxr-xr-x  root supergroup    0 2013-03-06 17:21  /user/root

1.3
命令查看hadoop数据文件

~ hadoop fs -cat /user/hdfs/o_same_school/part-m-00000

10,3,tsinghua university,2004-05-26 15:21:00.0

23,4007,北京第一七一中学,2004-05-31 06:51:53.0

51,4016,大连理工大学,2004-05-27 09:38:31.0

89,4017,Amherst College,2004-06-01 16:18:56.0

92,4017,斯坦福大学,2012-11-28 10:33:25.0

99,4017,Stanford University Graduate School of Business,2013-02-19 12:17:15.0

113,4017,Stanford University,2013-02-19 12:17:15.0

123,4019,St Paul‘s Co-educational College - Hong Kong,2004-05-27 18:04:17.0

138,4019,香港苏浙小学,2004-05-27 18:59:58.0

172,4020,University,2004-05-27 19:14:34.0

182,4026,ff,2004-05-28 04:42:37.0

183,4026,ff,2004-05-28 04:42:37.0

189,4033,tsinghua,2011-09-14 12:00:38.0

195,4035,ba,2004-05-31 07:10:24.0

196,4035,ma,2004-05-31 07:10:24.0

197,4035,southampton university,2013-01-07 15:35:18.0

246,4067,美国史丹佛大学,2004-06-12 10:42:10.0

254,4067,美国史丹佛大学,2004-06-12 10:42:10.0

255,4067,美国休士顿大学,2004-06-12 10:42:10.0

257,4068,清华大学,2004-06-12 10:42:10.0

258,4068,北京八中,2004-06-12 17:34:02.0

262,4068,香港中文大学,2004-06-12 17:34:02.0

310,4070,首都师范大学初等教育学院,2004-06-14 15:35:52.0

312,4070,北京师范大学经济学院,2004-06-14 15:35:52.0

1.4 rhdfs查看hadoop数据文件

>  hdfs.cat("/user/hdfs/o_same_school/part-m-00000")

[1] "10,3,tsinghua university,2004-05-26 15:21:00.0"

[2] "23,4007,北京第一七一中学,2004-05-31 06:51:53.0"

[3] "51,4016,大连理工大学,2004-05-27 09:38:31.0"

[4] "89,4017,Amherst College,2004-06-01 16:18:56.0"

[5] "92,4017,斯坦福大学,2012-11-28 10:33:25.0"

[6] "99,4017,Stanford University Graduate School of Business,2013-02-19 12:17:15.0"

[7] "113,4017,Stanford University,2013-02-19 12:17:15.0"

[8] "123,4019,St Paul‘s Co-educational College - Hong Kong,2004-05-27 18:04:17.0"

[9] "138,4019,香港苏浙小学,2004-05-27 18:59:58.0"

[10] "172,4020,University,2004-05-27 19:14:34.0"

[11] "182,4026,ff,2004-05-28 04:42:37.0"

[12] "183,4026,ff,2004-05-28 04:42:37.0"

[13] "189,4033,tsinghua,2011-09-14 12:00:38.0"

[14] "195,4035,ba,2004-05-31 07:10:24.0"

[15] "196,4035,ma,2004-05-31 07:10:24.0"

[16] "197,4035,southampton university,2013-01-07 15:35:18.0"

[17] "246,4067,美国史丹佛大学,2004-06-12 10:42:10.0"

[18] "254,4067,美国史丹佛大学,2004-06-12 10:42:10.0"

[19] "255,4067,美国休士顿大学,2004-06-12 10:42:10.0"

[20] "257,4068,清华大学,2004-06-12 10:42:10.0"

[21] "258,4068,北京八中,2004-06-12 17:34:02.0"

[22] "262,4068,香港中文大学,2004-06-12 17:34:02.0"

[23] "310,4070,首都师范大学初等教育学院,2004-06-14 15:35:52.0"

[24] "312,4070,北京师范大学经济学院,2004-06-14 15:35:52.0"

2.
rmr2包的使用

启动R程序

> library(rmr2)

Loading required package: Rcpp

Loading required package: RJSONIO

Loading required package: digest

Loading required package: functional

Loading required package: stringr

Loading required package: plyr

Loading required package: reshape2

2.1
执行r任务

> small.ints = 1:10

> sapply(small.ints, function(x) x^2)

[1]   1   4   9  16  25  36  49  64  81 100

2.2
执行rmr2任务

> small.ints = to.dfs(1:10)

13/03/07 12:12:55 INFO util.NativeCodeLoader: Loaded the native-hadoop library

13/03/07 12:12:55 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library

13/03/07 12:12:55 INFO compress.CodecPool: Got brand-new compressor

> mapreduce(input = small.ints, map = function(k, v) cbind(v, v^2))

packageJobJar: [/tmp/RtmpWnzxl4/rmr-local-env5deb2b300d03, /tmp/RtmpWnzxl4/rmr-global-env5deb398a522b, /tmp/RtmpWnzxl4/rmr-streaming-map5deb1552172d, /root/hadoop/tmp/hadoop-unjar7838617732558795635/] [] /tmp/streamjob4380275136001813619.jar tmpDir=null

13/03/07 12:12:59 INFO mapred.FileInputFormat: Total input paths to process : 1

13/03/07 12:12:59 INFO streaming.StreamJob: getLocalDirs(): [/root/hadoop/tmp/mapred/local]

13/03/07 12:12:59 INFO streaming.StreamJob: Running job: job_201302261738_0293

13/03/07 12:12:59 INFO streaming.StreamJob: To kill this job, run:

13/03/07 12:12:59 INFO streaming.StreamJob: /disk1/hadoop/hadoop-1.0.3/libexec/../bin/hadoop job  -Dmapred.job.tracker=hdfs://r.qa.tianji.com:9001 -kill job_201302261738_0293

13/03/07 12:12:59 INFO streaming.StreamJob: Tracking URL: http://192.168.1.243:50030/jobdetails.jsp?jobid=job_201302261738_0293

13/03/07 12:13:00 INFO streaming.StreamJob:  map 0%  reduce 0%

13/03/07 12:13:15 INFO streaming.StreamJob:  map 100%  reduce 0%

13/03/07 12:13:21 INFO streaming.StreamJob:  map 100%  reduce 100%

13/03/07 12:13:21 INFO streaming.StreamJob: Job complete: job_201302261738_0293

13/03/07 12:13:21 INFO streaming.StreamJob: Output: /tmp/RtmpWnzxl4/file5deb791fcbd5

> from.dfs("/tmp/RtmpWnzxl4/file5deb791fcbd5")

$key

NULL

$val

v

[1,]  1   1

[2,]  2   4

[3,]  3   9

[4,]  4  16

[5,]  5  25

[6,]  6  36

[7,]  7  49

[8,]  8  64

[9,]  9  81

[10,] 10 100

2.3
wordcount执行rmr2任务

> input<- ‘/user/hdfs/o_same_school/part-m-00000‘

> wordcount = function(input, output = NULL, pattern = " "){

wc.map = function(., lines) {

keyval(unlist( strsplit( x = lines,split = pattern)),1)

}

wc.reduce =function(word, counts ) {

keyval(word, sum(counts))

}

mapreduce(input = input ,output = output, input.format = "text",

map = wc.map, reduce = wc.reduce,combine = T)

}

> wordcount(input)

packageJobJar: [/tmp/RtmpfZUFEa/rmr-local-env6cac64020a8f, /tmp/RtmpfZUFEa/rmr-global-env6cac73016df3, /tmp/RtmpfZUFEa/rmr-streaming-map6cac7f145e02, /tmp/RtmpfZUFEa/rmr-streaming-reduce6cac238dbcf, /tmp/RtmpfZUFEa/rmr-streaming-combine6cac2b9098d4, /root/hadoop/tmp/hadoop-unjar6584585621285839347/]
[] /tmp/streamjob9195921761644130661.jar tmpDir=null

13/03/07 12:34:41 INFO util.NativeCodeLoader: Loaded the native-hadoop library

13/03/07 12:34:41 WARN snappy.LoadSnappy: Snappy native library not loaded

13/03/07 12:34:41 INFO mapred.FileInputFormat: Total input paths to process : 1

13/03/07 12:34:41 INFO streaming.StreamJob: getLocalDirs(): [/root/hadoop/tmp/mapred/local]

13/03/07 12:34:41 INFO streaming.StreamJob: Running job: job_201302261738_0296

13/03/07 12:34:41 INFO streaming.StreamJob: To kill this job, run:

13/03/07 12:34:41 INFO streaming.StreamJob: /disk1/hadoop/hadoop-1.0.3/libexec/../bin/hadoop job  -Dmapred.job.tracker=hdfs://r.qa.tianji.com:9001 -kill job_201302261738_0296

13/03/07 12:34:41 INFO streaming.StreamJob: Tracking URL: http://192.168.1.243:50030/jobdetails.jsp?jobid=job_201302261738_0296

13/03/07 12:34:42 INFO streaming.StreamJob:  map 0%  reduce 0%

13/03/07 12:34:59 INFO streaming.StreamJob:  map 100%  reduce 0%

13/03/07 12:35:08 INFO streaming.StreamJob:  map 100%  reduce 17%

13/03/07 12:35:14 INFO streaming.StreamJob:  map 100%  reduce 100%

13/03/07 12:35:20 INFO streaming.StreamJob: Job complete: job_201302261738_0296

13/03/07 12:35:20 INFO streaming.StreamJob: Output: /tmp/RtmpfZUFEa/file6cac626aa4a7

> from.dfs("/tmp/RtmpfZUFEa/file6cac626aa4a7")

$key

[1] "-"

[2] "04:42:37.0"

[3] "06:51:53.0"

[4] "07:10:24.0"

[5] "09:38:31.0"

[6] "10:33:25.0"

[7] "10,3,tsinghua"

[8] "10:42:10.0"

[9] "113,4017,Stanford"

[10] "12:00:38.0"

[11] "12:17:15.0"

[12] "123,4019,St"

[13] "138,4019,香港苏浙小学,2004-05-27"

[14] "15:21:00.0"

[15] "15:35:18.0"

[16] "15:35:52.0"

[17] "16:18:56.0"

[18] "172,4020,University,2004-05-27"

[19] "17:34:02.0"

[20] "18:04:17.0"

[21] "182,4026,ff,2004-05-28"

[22] "183,4026,ff,2004-05-28"

[23] "18:59:58.0"

[24] "189,4033,tsinghua,2011-09-14"

[25] "19:14:34.0"

[26] "195,4035,ba,2004-05-31"

[27] "196,4035,ma,2004-05-31"

[28] "197,4035,southampton"

[29] "23,4007,北京第一七一中学,2004-05-31"

[30] "246,4067,美国史丹佛大学,2004-06-12"

[31] "254,4067,美国史丹佛大学,2004-06-12"

[32] "255,4067,美国休士顿大学,2004-06-12"

[33] "257,4068,清华大学,2004-06-12"

[34] "258,4068,北京八中,2004-06-12"

[35] "262,4068,香港中文大学,2004-06-12"

[36] "312,4070,北京师范大学经济学院,2004-06-14"

[37] "51,4016,大连理工大学,2004-05-27"

[38] "89,4017,Amherst"

[39] "92,4017,斯坦福大学,2012-11-28"

[40] "99,4017,Stanford"

[41] "Business,2013-02-19"

[42] "Co-educational"

[43] "College"

[44] "College,2004-06-01"

[45] "Graduate"

[46] "Hong"

[47] "Kong,2004-05-27"

[48] "of"

[49] "Paul‘s"

[50] "School"

[51] "University"

[52] "university,2004-05-26"

[53] "university,2013-01-07"

[54] "University,2013-02-19"

[55] "310,4070,首都师范大学初等教育学院,2004-06-14"

$val

[1] 1 2 1 2 1 1 1 4 1 1 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

[39] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

时间: 2024-12-26 08:52:28

RHadoop环境搭建的相关文章

一、环境搭建

1 更新到最新版本的pip(这是安装python扩展包的一个插件)命令如下: python -m pip install --upgrade pip 2 使用pip安装virtualenv,命令 pip install virtualenv  如果要指定版本号,pip install virtualenv==15.0.1(安装虚拟环境) 3 创建django虚拟环境,命令 virtualenv django_basic_venv 4 使用虚拟环境 需要进入到安装目录的Scripts文件夹下,运行

Ionic2环境搭建及文件目录介绍

[注]引用自:http://blog.csdn.net/jasonzds/article/details/53821184 1环境搭建 一年前研究混合框架,初步确定了四种方案给公司选择,ionic,hbuilder,wex5,react-native这四个框架各有优缺点,ionic和react-native是国外框架,相对好一点,文档更新很快,就不一一说了,大概的思路都是一样的,js逻辑实现,同时调用原生功能,h5,css3 UI实现,其实他们都有自己的ui框架,当时选择了国内的hbuiler,

Selenium+Java+Eclipse 自动化测试环境搭建

一.下载Java windows java下载链接 https://www.java.com/zh_CN/download/win10.jsp 二.安装Java 安装好后检查一下需不需要配置环境变量,现在java 8已经不用配置环境变量了,直接在命令行输入:java -version 三.下载和安装Eclipse windows Eclipse下载链接 https://www.eclipse.org/downloads/ 你也可以下载绿色版 四.下载selenium,然后解压 selenium

Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要配置Qt库和编译器.编译器只能使用苹果公司自主研发的Clang.1.分别下载并安装XCode和Command Line Tools(必须安装),安装完毕后,Clang就有了. https://developer.apple.com/downloads/ 2.下载Qt并默认安装 http://down

基于 Eclipse 的 MapReduce 开发环境搭建

文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html 上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起来有问题的呢,拖到周一才将问题解决掉.刚好这周也将之前看的内容复习了下,边复习边码代码理解,印象倒是很深刻,对看过的东西理解也更深入了. 目录 1.概述 2.环境准备 3.插件配置 4.配置文件系统连接 5.测试连接 6.代码编写与执行 7.问题梳理 7.1 console 无日志输出问题 7.2

ICE分布式文件管理系统——ICE环境搭建(其二)

上一博文,我们讲述了ICE这个中间件的基本认识. 接下来我们讲述开发环境搭建. 其过程主要分为三步: 安装GCC-4.4.6.安装ICE-3.4.2.安装QT-4.7.3. (本文是基于LINUX下的ICE-3.4.2的安装,如果已安装了GCC(版本高于GCC-4.4.6亦可),请直接安装ICE) 一.安装GCC: (gcc各版本浏览地址:http://ftp.gnu.org/gnu/gcc/) 一般来说基于linux的操作系统都是默认安装了GCC的.假如说你的电脑没有的话 请百度一哈,可以解决

[Step-By-Step Angular2](1)Hello World与自动化环境搭建

随着rc(release candidate,候选版本)版本的推出,万众瞩目的angular2终于离正式发布不远啦!五月初举办的ng-conf大会已经过去了整整一个月,大多数api都如愿保持在了相对稳定的状态——当然也有router这样的例外,在rc阶段还在大面积返工,让人颇为不解——不过总得说来,现在学习angular2不失为一个恰当的时机. Google为angular2准备了完善的文档和教程,按理说,官网(https://angular.io)自然是学习新框架的最好教材.略显遗憾的是,在B

Linux交叉开发环境搭建 —— 效率之源

楼主今天终于把所有Linux开发环境需要的软件下载完毕了.虽然以前也是搭建过的,时间久了又折腾了一晚上. 交叉环境: Windows.Linux文件共享 SecureCRT 连接虚拟机终端 工具: VirtualBox ubuntu-16.04-desktop-amd64.iso(ubuntu官网下载) SecureCRT Source Insight 虚拟机搭建: 检查bios虚拟技术功能开启 新建虚拟机,选择创建虚拟硬盘,其余均默认 点击新建虚拟机设置->存储->选中没有光盘->点击

Intellij IDEA 14.1.4 Scala开发环境搭建

主要内容 Intellij IDEA开发环境简介 Intellij IDEA Scala开发环境搭建 Intellij IDEA常见问题及解决方案 Intellij IDEA常用快捷键 1. Intellij IDEA开发环境简介 具体介绍请参见:http://baike.baidu.com/link?url=SBY93H3SPkmcmIOmZ8H60O1k4iVLgOmdqoKdGp9xHtU-Pbdsq2cpn75ZPZPWAJxeUlwr0ravraQzOckh777beq Intelli