hadoop 透過cachefile來避免資料傾斜
package hello_hadoop; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.filecache.DistributedCache; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.FileSplit; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class GetFileName { //得到處理的檔名,以及將需要的檔案快取到相應的節點 private final static Log LOG = LogFactory.getLog(GetFileName.class); public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException, URISyntaxException { LOG.info("Go into the main method ......"); Configuration conf = new Configuration(); Job job = Job.getInstance(conf); job.setJarByClass(GetFileName.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setMapperClass(GetFileNameMapper.class); job.setNumReduceTasks(0); //叢集上新增DistributedCache data134:9000namenode的描述 #thelinkofthefile改檔案的連結,下面讀取的時候需要使用 job.addCacheFile(new URI("hdfs://data134:9000/home/tmp.txt#thelinkofthefile")); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); boolean test = job.waitForCompletion(true); LOG.info("End the main method ......"); System.exit(test?0:1); } } class GetFileNameMapper extends Mapper<LongWritable, Text, Text, Text>{ private final Log LOG = LogFactory.getLog(GetFileNameMapper.class); @Override protected void setup(Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { if(context.getCacheFiles().length>0); URI u = context.getCacheFiles()[0]; //這裡使用連結來訪問檔案 BufferedReader br = new BufferedReader( new FileReader(new File("./thelinkofthefile"))); String line = br.readLine(); context.write(new Text(line), new Text()); System.out.println("Here I read Line :"+line); } @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2213417/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spark學習——資料傾斜Spark
- IoT資料傾斜如何解決
- 資料傾斜解決辦法
- Spark 資料傾斜及其解決方案Spark
- hive優化-資料傾斜優化Hive優化
- PostgreSQL DBA(193) - 資料傾斜下的HashJoinSQL
- Redis 切片叢集的資料傾斜分析Redis
- 【Hive】資料傾斜優化 shuffle, join, group byHive優化
- Hive千億級資料傾斜解決方案Hive
- 【Spark篇】---Spark解決資料傾斜問題Spark
- 大資料SQL優化之資料傾斜解決案例全集大資料SQL優化
- 如何解決 Redis 資料傾斜、熱點等問題Redis
- Spark效能最佳化篇三:資料傾斜調優Spark
- 五款傾斜攝影與三維資料處理工具介紹:GISBox、Cesiumlab、OSGBLab、靈易智模、傾斜伴侶
- 一種自平衡解決資料傾斜的分表方法
- Redis 資料傾斜與 JD 開源 hotkey 原始碼分析揭秘Redis原始碼
- 實戰 | Hive 資料傾斜問題定位排查及解決Hive
- Cesium傾斜模型單體化模型
- Oracle資料傾斜導致的問題-無繫結變數Oracle變數
- Oracle資料傾斜導致的問題-有繫結變數Oracle變數
- salesforce零基礎學習(九十九)Salesforce Data Skew(資料傾斜)Salesforce
- 如何解決Hive中經常出現的資料傾斜問題Hive
- PIoU Loss:傾斜目標檢測專用損失函式,公開超難傾斜目標資料集Retail50K | ECCV 2020 Spotlight函式AI
- Spark SQL三種join和資料傾斜的產生和解決辦法SparkSQL
- 數倉效能最佳化:傾斜最佳化-表示式計算傾斜的hint最佳化
- 資料安全:透過資料雲備份來抵禦勒索病毒
- 傾斜單體化模型技術實現模型
- 傾斜攝影測量知識基礎
- Oracle面對“資料傾斜列使用繫結變數”場景的解決方案Oracle變數
- 編號函式 自定義函式 集合型別 表的優化 資料傾斜函式型別優化
- 為什麼要透過API介面來獲取資料API
- 如何透過資料分析來支援TPM模式的決策?模式
- Echarts x軸文字顯示不全(傾斜、豎直)Echarts
- 透過等待看資料庫資料庫
- 直播小程式原始碼,Android 傾斜文字 效果設定原始碼Android
- CSS3頁面傾斜一定的角度CSSS3
- 如何避免資料治理過程的誤區
- 透過預熱來最佳化PG資料庫的SQL效能資料庫SQL