idea用spark本地操作hdfs集群

在windows开发机上使用spark的local模式读取远程hadoop集群中的hdfs上的数据,这样的目的是方便快速调试,而不用每写一行代码或者一个方法,一个类文件都需要打包成jar上传到linux上,再扔到正式的集群上进行测试,像功能性验证直接使用local模式来快速调测是非常方便的,当然功能测试之后,我们还需要打包成jar仍到集群上进行其他的验证比如jar包的依赖问题,这个在local模式是没法测的,还有集群运行的调优参数,这些都可以在正式仍到集群时验证。


  org.scala-lang
  scala-library
  2.11.8


  org.apache.hadoop
  hadoop-client
  2.7.2


  org.apache.hadoop
  hadoop-hdfs
  2.7.2


  org.apache.spark
  spark-core_2.11
  2.1.1
 



val conf = new SparkConf().setMaster("local[2]").setAppName("kafka")
 conf.set("spark.testing.memory", "571859200")
// conf.set("fs.defaultFS", "hdfs://192.22.22.122:9000");
 val sc= new SparkContext(conf)
 val rrd=sc.textFile("hdfs://dip:8020/broadcast/TerToPro_Simple.csv")
 println(rrd.count())
 sc.stop()

注:

问题一: 
抛异常:java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.;

可能是端口问题 
cdh的环境下,hdfs是8020端口,conf.set(“fs.defaultFS”, “hdfs://192.168.0.4:8020”); 
普通hadoop环境,hdfs是8020端口,conf.set(“fs.defaultFS”, “hdfs://192.168.0.121:9000”);
--------------------- 

问题二: 
抛异常:org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop, access=WRITE, inode=”/magina/output”:hdfs:supergroup:drwxr-xr-x 
当前系统用户为hadoop,而调用环境是cdh,操作hdfs文件的用户是hdfs,所以要进行覆盖: 
(推荐)System.setProperty(“HADOOP_USER_NAME”,”hdfs”);

或者放开目录的权限,命令如下: 
$ hadoop fs -chmod 777 /user/hadoop 
chmod 777 /hadoop

问题三: 
兼容性问题: 
Job job = prepareJob()的老方法不在适用 
现如今新版2.5 
Job job = Job.getInstance(); 
//定义Driver类 
job.setJarByClass(Write2HiveJob.class); 
job.setJobName(“write2Hive”); 
……

问题四: 
解决Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 0 time(s); retry policy is… 
需要在yarn-site.xml中添加写配置: 
yarn.resourcemanager.address127.0.0.1:8032yarn.resourcemanager.scheduler.address127.0.0.1:8030yarn.resourcemanager.resource-tracker.address127.0.0.1:8031 
重新格式化HDFS的方法 
http://blog.csdn.net/yeruby/article/details/21542465

问题五: 
如果eclipse连接hadoop出现Connection refused 错误,ping linux的hadoop集群也能ping通, 
/etc/init.d/iptables stop #需要切换到root用户 
或者 service iptables stop 
永久关闭防火墙 
chkconfig –level 35 iptables off 
配置文件中 xxx.conf 中使用ip地址
--------------------- 

 

 

你可能感兴趣的:(Spark)