text:
READ about Piers Morgan's long career in journalism here.
Not once in any of her previous "Piers Morgan Live" visits has Chelsea Handler pulled any punches.
Not when she stressed the importance of "sleeping around with people you work with".
Certainly not when she spoke of her attempt to read "50 Shades of Grey", before giving up, and ultimately describing the book as "poorly written" and "trash".
And not even when the television personality and comedian weighed in on Sarah Palin, referring to the former Alaskan governor as "not a serious person".
So, it should come as little surprise that the 39-year-old star of "Chelsea Lately" held nothing back when sitting across from Piers Morgan on Monday evening.
As the topic turned to social media, the host attempted to pay his guest a compliment, noting "you tweet very amusingly."
In classic fashion, Handler fired back, and not in a loving way:
"I wish you did."
Knocking the host for his lack of focus, the author of the new book "Uganda Be Kidding Me" really lit into her fellow late-night colleague.
"You can't even pay attention for sixty seconds. You're a terrible interviewer," she said.
Attempting to defend himself, Morgan offered the following explanation:
"Well, you just weren't keeping my attention."
Handler, however, wasn't having it:
"That's not my problem ... this is your show. You have to pay attention to the guests that you invited on your show ... it doesn't matter how interesting I am. You signed up for this show," she insisted.
Morgan continued to suggest that it was the guests fault for not being interesting enough. At this point, Handler went where only she could go, unleashing a zinger that left an embarrassed Morgan speechless:
"Well, maybe that's why your job is coming to an end."
Trying desperately to redeem himself, Morgan went to the well with one of his usual questions, asking Handler about the prospect of reliving one hour of her life.
Without hesitation, she hammered him once more:
"It would be spending this hour differently."
Watch the above clip for more, as the host begs his guest to "be nice." And, for the next episode of "Piers Morgan Live," watch CNN every night at 9p.
» Follow "Piers Morgan Live" on Twitter
» Follow "Piers Morgan Live" on Instagram
Reblogged this on Nutshell.
beatiful lady !
Don't like her, she is full of herself and she is insulting her guests in her show...
She just figured she would beat up on an easy target to distract from her own problems.
Right, exactly like him...
Who cares about her opinion? She should find another Hungarian old man and leave the public alone
Hey CNN! What's this? What's happening? What's going on? You announce you're canceling "Sneers Moron's" show –
fervently wished for, and richly deserved – and, THE INSUFFERABLE BOOB IS STILL ON!!! Pull the trigger already!
Thank God she doesn't want to be taken seriously; not like GOVERNOR Sarah Palin!
You mean Ex-Governor.. You remember - the quitter who didn't want that whole governor thing to interfere with her TLC reality show. Yeah that's the one.
It's SEMI-Governor Palin. If she was a dessert, she'd be called "Half-Baked Alaska!"
What a fool that woman is. Sickening. To think i thought she was funny for like a split second. Thank god I went by my instinct. I was wrong. She is one of the most nauseating people on TV today. Her insults to Piers were really off base and ignorant. I guess she is proud to be American, is America proud of her?
She is right, and I'm glad someone finally told him about himself. Piers is constantly asking his guests questions without giving them a real opportunity to answer. They will be in mid-answer and he'll interrupt and ask another question. He is a horrible interviewer, and that makes his show difficult/unpleasant to watch. Which is probably why his show is ending.
At least, he doesn't have a mouth like a sewer and intentionally hurt people as does Handler. I'm not a big fan of Morgan–but I actively dislike Handler and don't know why her network puts up with her cheap ridicule and hurtful words.
Hey Mary - I think we all know by now that Piers is quite intolerable. Don't side with the sinking ship only after another cannonball strikes it.
Rude and hurtful remarks are not funny.
Maybe somebody ought to have told Piers that back when he went on a transphobic tirade at one of his guests over twitter. But I'm sure that guest deserved Piers' bigoted remarks, they probably weren't particularly "interesting" to him.
You guys must not watch Chelsea Lately. She's being funny...that's her comedic style. It's a little dry and sarcastic, but effective. Piers laughed, either out of embarrassment or humor, but he knows that's her style and he took a gamble putting her on the show. Maybe we should all be a little more light hearted.
She's not 'a little dry and sarcastic'–she's mean-mouthed and dirty. If you like filth and ridicule of others as entertainment, that says a lot about you.
Aren't you ridiculing the commenter for liking Chelsea? That says a lot about you.
Please, she gets her attention this way. She is white trash and has similarly trashy show. Her comments hold no value and say more about her than the person she's referencing or talking to. Piers is an excellent interviewer. He takes risks, tests boundaries, and asks the tough questions that we all want asked. He a true reporter and has made CNN interesting and worth watching. I have no idea what CNN is thinking letting him go but I can imagine Piers will move on to bigger and better things. And as for Chelsea, well trashy people will say trashy things. Nothing surprising there.
To Susan Mejia,you nailed it perfectly.I agree fully what you stated.She personifies a trash talking sleaze with no self respect,consistent with far too many of today's so called "adults" that refuse to mature and would rather make idiot youtube videos and display their ignorance then learn anything or be of value to society.All you need to do is watch Jay Leno's "streetwalking" videos and will quickly discover how disconnected and sarcastic our younger generation is today.Disgraceful and she is no exception at all.
You know what Susana? I watched Chelsea's show every night almost religiously....bought all her books...and told everyone how much I like her humor and seeming generosity towards her family. But now...after that miserable mouth off with Piers Morgan I no longer watch her show. It's sad that she had to be rude for publicity. She doesn't have half the class of Piers Morgan which is why he simply laughed it off. What an embarrassing display Chelsea..Uganda be kidding cos I sure ain't gonna buy that book until you get off your phony pedestal. Has celebrity gone to your head?
Pierce can suck her dick.
I think we have a winner!
This is the world as we know it. This is how celebrities get their ratings higher. I'm not condoning this behavior, but there is something to be said about a woman that can stand up to a man and not back down, a woman who isn't scared to make fun of herself, and a woman that fully accepts all walks of life. I'm not so sure about Piers.
Wow! Are you full of it!
damn right I am. And who isn't?
Just by watching this video, I felt that what Chelsea said was right. Piers was not letting her finish and came off as rude. Piers is the host and he should engage in a positive way even if the guest is boring. Thats what he is being paid for.
She is a comedian, I would not be surprised if she talks sarcastically. In this case, something went wrong which was not shown but in the end she is the guest and he is the host. If this happened on Chelsea's show, then that would not another story.
I dare her to go on Wendy Williams and try that stunt.
Chelsea forgot the ONLY reason she was on the show was tp promote her book she was rude, ignorant and disprspctfull. She is an awfull comedian at the end of her career desperately trying to hang on
Chelsea is right. Mr. Morgan blames everyone else for his lack of talent. He is a Pompous individual and for the
life of me, cannot see how he has managed to be allowed to stay on the air. CNN must not have been able to
find someone with intelligence for that time slot. Maybe his far left rant does not connect with any but a very
small few. An individual to whom a non left or right but an honest look at the world would most likely bring viewers
to a network that used to be on top of their game.
Chelsea is not funny by any stretch of the imagination. And she is quite full of herself, and she is most certainly a racist. This is how this woman gets her attention, as we can clearly see in this video and throughout these posts. Being rude is NOT funny. Thats enough attention from me for this vial woman.
Perez Hilton,Jenny McCarthy,HER...This is today's modern example in America.Sarcastic,disrespectful,full of themselves,crude,no class wannabe comedians that care little about how they speak to people,with Mr. Morgan just as bad of an example as well.I am saddened that this is what people in the public eye have become.Chelsea to me is no comedian or celeb,just another degrading little parasite representative of the ignorance of today's generation.What is sad is that she is in her 30's displays the maturity of today's antisocial,disconnected college youth that infect society today.
I think they are both pretty unbearable at times, but her comments were out of line.
Chelsea ADDS NO VALUE TO OUR SOCIETY; very disrespectful individual, no manners or class; if she felt Pier was such a bad interviewer, why did she go on the show (she had to; to pimp her book) people save your hard earned $$$ and don't spend money on her shows or books!
Ii'm no Piers fan, but Chelsea is nasty. She just looks like her feet stink.
I wish Piers Morgan would return to England...and take that ugly, loud-mouthed, no-talent Sharon Osbourne with her. I must give kuddos to the media. When one obnoxious "personality" fades – i.e. Howard Cosell + others – from the scene, the media is exceptionally capable of finding one or more replacements.
Morgan is a complete sc***bag and a d-bag. He deserves all the disrespect in the world.
Feeling better now?
I used to be a loyal (retired Canadian) CNN viewer. Sorry to say it's gone down hill and so has my viewing. My opinion may not be read or considered important to anyone there, but from here I have something I feel the need to say. I will Never watch Chelsea H. again. Kudos to Piers for holding it together after that horrid display of ill manners. Her thinly veiled contempt, her hurtful nasty come backs did not make her appealing as a guest. If that is what CNN thinks of comedy I'll pass. It made me sick to my stomach to listen and I flipped the station. I hope you didn't pay her for that. Keep Piers & Anderson, stick to real journalism, and avoid such unpleasant interviews.
When Piers was on her show she was sucking up to him
I imagine this is her way of trying to get attention; I'm sure she knew it would get retweeted. Most people don't even know who she is, and it's surprising that CNN and Piers Morgan stooped to having her on their show. She is pretty much a thinner and less popular version of Roseanne Barr.
Handler is a trashy sleaze who needs to get her a$$ handed to her for disrespecting physically superior men. If it was in the real, non-media world she'd be having a beat down coming to her with that slimy mouth of hers.
Hey Granted. Buddy, It is 2014 and I like to think we live in a progressive, forward thinking society. I agree with what you were saying; Handler was disrespectful and let her emotions drive what she was saying. However, Handler should not disrespect any person; the fact that he is a man is arbitrary. The fact that he is a man doesn't make him superior, which it seems to me is what what you were implying. Also, I'm not even going to address your use of "beat down" and am choosing to give you the benefit of the doubt that you only meant that in a metaphorical sense. (Which, by the way, subconsciously helps to fuel the thinking that physical acts of violence are by any means justified.)
As a typical Brit Blowhard–who has not been relevant since WWII and our saving their ass from speaking German–this troll needs to go back where he came from–wait–he is, lol–if anybody needs disrespecting–it's this–how do they say it in England–FUKWIT–Good riddance–one less parasite in the country–we have enough running the guberment right now.
My opinion is that Chelsey Handler is mean spirited. Anyone who is known for and who seems to promotes substance use and abuse to a country where one in four deaths is attributed to alcohol, tobacco, and illicit drug use needs to check her motives for ripping into someone else. I've never liked this woman am appalled at the thought that she may be admired by a few people.
BRAVO Chelsea! Maybe if Mr.Morgan had shown more respect for the country he's been making millions off of every night with his ultra boring,anti American show,he would still have his job! She's right! You don't hear anyone on TV in this country calling his beloved Queen Elizabeth a lazy,ugly old stuck up sack of crap do you? Let him go back to where he came from.He hates the USA anyway and most of us hate him! He's not even a pimple on Larry Kings butt! Good riddance!
She is probably a failure of the nature, as there are no excuses about her...Mr. Morgan it's time to talk and be surrounded with educated people again, higher than a college or not even...
Chelsea is an embarrassment to herself and to women. Shame on her and shame on those who think that Piers, because he is British, should not be able to speak his mind. His intelligence goes over the heads of too many people because of their own stupidity. If Piers leaves CNN, the loss will be on the heads of the idiots who made the decision. Larry King was an insufferable ,horrible interviewer,very much past his prime. For the love of me, I will never understand why Americans think they are superior. Look at statistics and see how low in the standings we are compared to other nations.....very low!! The problem is that the people are too blind and too stupid to understand it.
Poor Piers. He got a dose of his own medicine. He tried even at the very end of his last show to show what an idiot he is,
by STILL trying to push his anti-gun agenda. Guess he "shot" his way out of a job. Priceless!
The material is extremely interesting.|
Love these articles they have the best info
Best Private Proxies – 50 Price reduction + Cost-free Proxies! High level top quality, Indefinite bandwith, 1000 mb/s superspeed, 99,9 uptime, Low consecutive IP's, Simply no utilization limitations, Multiple subnets, USA or maybe The european union proxies – Acquire Right now – DreamProxies.com
best erectile medication
erectile issues
erectile function cocaine abuse
One thing I would really like to comment on is that weightloss program fast may be possible by the proper diet and exercise. Ones size not only affects appearance, but also the complete quality of life. Self-esteem, depression, health risks, as well as physical ability are impacted in weight gain. It is possible to make everything right whilst still having a gain. If this happens, a medical problem may be the primary cause. While excessive food and not enough exercising are usually accountable, common health conditions and widely used prescriptions might greatly help to increase size. Thanks for your post in this article.
I have witnessed that wise real estate agents all around you are starting to warm up to FSBO Advertising and marketing. They are recognizing that it's more than merely placing a sign in the front place. It's really regarding building human relationships with these dealers who sooner or later will become customers. So, while you give your time and energy to helping these traders go it alone - the "Law of Reciprocity" kicks in. Thanks for your blog post.
Buy Private Proxies: Private and confidential, High level high-quality proxies, Endless data transfer rate, 1000 mb/s superspeed, 99,9 uptime, USA place proxies – DREAMPROXIES.COM


text:
I have been rather silent on the Torque 6 front of things. That said - Going to try and be more active from now on.
Improving the Shader Authoring Pipeline -
I feel that there needs to be a drop down menu for each shader "type".
So that people can get faster feedback on the shaders within the material editor.
This should also be modular so that contributors can add their own shaders in a very easy fashion.
Starter Shaders in Torque 6
The Shaders in Torque 6 are not the best yet. They can be better. A better diversity of "Starter Shaders" would help this and show off the potential of Torque 6.
The following Shader types would be great to have in torque 6.
Clothing Shader
Hair Shader
Toon Shader
Skin Shader
Foliage Shader
Basically what i am suggesting is bunch of "starter shaders" for lack of a better term that are built into torque 6. These can act as a starting point for shader work in the editor.
Programing Work flow
I am unsure if this is planned but some form of visual scripting support would also be greatly appreciated.
Unreal Engine 4 makes heavy use of it and it makes working with it allot faster work flow wise.
That said - I would recommend looking at Crown which has a Visual Scripting engine in both LUA and C++. I am unsure of the license though. If we do go the Visual Scripting route I think that LUA would be the best choice. Due to its wide spread use in the games industry and documentation overall.
Also - Sorry if this comes off as a bit blunt. Just want the best for Torque 6.
- HeadClot

subset: commoncrawl


text:
Main Skeletal Trauma Basic Science, Management and Reconstruction
You can write a book review and share your experiences. Other readers will always be interested in your opinion of the books you've read. Whether you've loved the book or not, if you give your honest and detailed thoughts then people will find new books that are right for them.


text:
ST. ANTON, Austria - Lindsey Vonn is "excited" to be back again on the World Cup circuit after a three-week layoff caused by an intestinal illness.
Vonn spoke briefly after her downhill training run Thursday in which she started fast but held back coming down the bumpy and twisty course to finish 3.98 seconds off the leading time by Lara Gut of Switzerland.
"I'm really excited to be back, feeling good, feeling happy and strong," said Vonn, a week after resuming ski training following her break.
The four-time overall World Cup champion left the circuit in mid-December for three weeks to fully recover from her illness. She missed six races.
Vonn says the break was "important for me because after being sick my legs just weren't strong anymore. At some point you have to listen to your body."
She plans to have another training run Friday before competing in the downhill and a super-G this weekend.
After being hospitalized for two days in November, Vonn won three straight speed races at Lake Louise, Alberta. She won another super-G the following week in St. Moritz, Switzerland.
Vonn then struggled in France, however, crashing in a downhill at Val d'Isere and failing to finish the opening run of a giant slalom at Courchevel. She flew back to the United States the following day to fully recover.
Vonn focused on fitness training and returned to practicing on snow last week in Hinterreit, Austria.
"It feels awesome. It's great to see all the girls on the World Cup," Vonn said. "I am excited to be here, excited to be racing again."
The American won the downhill and a super-combined event when the women's World Cup last stopped in St. Anton in December 2007. She won her first overall title that season.
Vonn plans to have another training run on Friday, but bad weather including overnight snowfall is forecast.
"Hopefully we'll get a training tomorrow and I get comfortable on this course," Vonn said. "I think everybody feels tired at the end of this course, but I feel strong again and everything is good."
Friend and rival Maria Hoefl-Riesch of Germany, who beat Vonn by three points for the overall title in 2011, is happy for the American to be back.
"But this is not an easy race for Lindsey getting back to the World Cup," Hoefl-Riesch said. "It's bumpy from top to bottom, there is no section where you can really charge. This is a difficult course, even for Lindsey."


text:
VANCOUVER, B.C. – The Vancouver Whitecaps' decision to trade left back Alain Rochat to D.C. United on Thursday surprised many who follow the team, and observers throughout the league.
After all, for a minimal return of a second-round pick in the 2015 MLS SuperDraft, and a conditional pick in 2016, the Whitecaps traded away one of the league's best in his position.
Or at least that's the narrative floating around social media among fans and some pundits.
The reality is quite different. Rochat, as talented as he remains, was underperforming – certainly away from home.
READ: Whitecaps eager to silence Seattle Sounders, pick up consecutive road wins
This season, the Swiss-Canadian failed to match the high standards he set for himself in Vancouver's first two years in MLS, finding himself culpable for a number of goals conceded.
His performances became so poor on the road, in fact, head coach Martin Rennie started to play Jordan Harvey at left back in away situations in recent weeks, and pushed Rochat into midfield where he could do less damage off the ball.
Following the trade's announcement on Thursday, Rennie, perhaps hoping to avoid saying something negative about his former player, wasn't in a particularly talkative mood about the transaction, dodging questions about the thinking behind the trade and its timing.
He did, however, express confidence his team has the personnel to move on.
"Whenever you make a move, there's lot of factors," Rennie told reporters following a training session at the University of British Columbia. "We've got quite a number of players who can play left back and quite a number of players who can play a similar role in midfield."
READ: Everything you need to know ahead of Vancouver's border battle vs. Seattle
Harvey specifically looks to benefit the most from this move, having been the player to replace Rochat in road games or whenever his teammate has been otherwise unavailable.
"I've got confidence in him," Rennie said of Harvey. "I think he's proven himself to be an MLS starter … Jordan's the man in possession right now."
Rennie did hint, however, that the move could be a precursor to further moves in the weeks to come.
"It gives us flexibility," Rennie said of freeing up a roster spot and some salary. "It gives us an opportunity to consider other options if that makes sense at the right time. The way it works in MLS, there is a salary cap. There's lots of juggling of numbers and salaries and so on, and when you do make a move, it does open up opportunities to make other [moves] if you want to."
Martin MacMahon covers the Vancouver Whitecaps for MLSsoccer.com.


text:
Broadway, Film Star Returns to Webster
Aug. 29, 2013
ST. LOUIS - In the two decades since Nathan Lee Graham, Musical Theatre '91, has been on the Webster University campus, he's had a career that Conservatory students dream of – he's walked the catwalk with Will Ferrell, he's visited Alabama with Reese Witherspoon, he's performed in a drag show in the remote Australian desert, and he's helped Lisa Kudrow with her comeback.
But the native St. Louisan is back now, and in a very big way. Graham is in rehearsals for his leading role as the Master of Ceremonies in the upcoming Repertory Theatre of St. Louis production of "Cabaret," which runs Sept. 11 through Oct. 6.
Graham is an all-around singer, dancer and performer, with stage, cabaret, television and film acting credits to his name, experience as a writer and director, and even a Grammy Award for Best Classical Album in 2005. His feature film credits include Todd in "Zoolander," Frederick Montana in "Sweet Home Alabama" and Geoff in "Hitch." On Broadway, Graham has played Phil D'armano in the Tony- and Grammy-nominated "The Wild Party," and Miss Understanding in the Tony Award-nominated "Priscilla, Queen of the Desert." (Small-world sidebar: Graham worked with another Webster Conservatory alum, Tony Award winner and choreographer/director Jerry Mitchell, in "Priscilla.")
Graham credits his versatility and success to the training he received at Webster's Conservatory of Theatre Arts.
"I've done everything – Broadway, film, television and classical – all as a result of Webster," he said. "Webster is known throughout the industry for consistently turning out working actors who can sing, dance and act. Since graduating from Webster I have always worked; I've never waited a table."
Graham said the Conservatory's very strict training has stayed with him to this day. Professor Byron Grant was a particularly memorable – and discipline-focused – mentor to Graham. "He was a huge influence on me. He saw something in me and nurtured it," Graham said.
He recalled being on the second floor of the Thompson House Music Building in a voice lesson with Grant. Grant put adhesive tape on Graham's forehead to restrict his eyebrow movement and had Graham sing with a pencil in his mouth. The idea was to master control of his facial muscles.
"My dear friend, the late Eartha Kitt, who was a master of control, once asked me how I developed my own control, because it's not an easy thing to learn," he said. "I told her I learned it at Webster. It is that kind of focus on discipline that has served me so well in everything I do."
Graham says his best memory of Webster is the way he got into the University's Conservatory in the first place. Growing up, Graham spent time both in St. Louis and in California. After graduating from Hazelwood Central High School in north St. Louis County, Graham spent the first semester of his freshman year at San Francisco State University, majoring in vocal performance.
His grandfather, who had attended Eden Theological Seminary, suggested that he consider Webster University instead. Graham's grandfather died suddenly one week later. Graham then returned to St. Louis with his grandmother and auditioned for acceptance into what he thought was Webster's vocal performance program. Instead, he found out he was actually auditioning for acceptance into the Conservatory. And because he had no monologue prepared, Graham didn't make the cut.
He then auditioned for the vocal performance program, was immediately accepted, and transferred to Webster for the second semester of his freshman year.
That spring, the Conservatory was performing the musical "Sweeney Todd."
"They needed great singers to be part of the large ensemble cast, so they invited Webster's vocal performance majors to audition," Graham said. The Conservatory had hired Ann Denise Ford, from New York, to be the guest director of the show. Ford cast Graham not as a member of the ensemble, but in the coveted role of Adolfo Pirelli, a role that typically would have gone to a Conservatory student.
Byron Grant and Leigh Gerdine School of Fine Arts Dean Peter Sargent then asked Graham to audition for the Conservatory; he joined the program that summer.
Graham calls his return to Webster a full-circle moment. "I believe our jobs as Webster Conservatory alums is to continue to do good work to reflect on everything that Webster gave us, " he said. "In turn, I think Webster's job is to continue to train as it always has, developing working actors who can do it all."


text:
CNN.com: Why not release both the originals and special editions on DVD?
George Lucas: The special edition, that's the one I wanted out there. The other movie, it's on VHS, if anybody wants it. ...
I'm not going to spend the, we're talking millions of dollars here, the money and the time to refurbish that, because to me, it doesn't really exist anymore. It's like this is the movie I wanted it to be, and I'm sorry you saw half a completed film and fell in love with it. But I want it to be the way I want it to be.
I'm the one who has to take responsibility for it. I'm the one who has to have everybody throw rocks at me all the time, so at least if they're going to throw rocks at me, they're going to throw rocks at me for something I love rather than something I think is not very good, or at least something I think is not finished.
The problem is that the VHS copy i have is the "Special Edition". Well, it's the 1997 Special Edition, not the 2004 Special Edition. I don't have the Original Trilogy. But, i'm going to have to get the DVD because I have to have Star Wars on DVD.
It would be nice if we could get the original unaltered movies on DVD. It is a part of movie history. The original Star Wars was the film that was nominated for Oscars, not the "special edition".


text:
Kythnos to Kimolos Ferry
New Email
New Mobile Number
Trailer / Caravan
Coronavirus ferry travel advice
Please note that the information provided is correct to the best of our knowledge at the time we have received the same information from the Ferry Operators. The situation is changing rapidly and we will try to keep the website updated as soon as we receive updates from the ferry companies.
Kythnos to Kimolos ferry information:
Kythnos to Kimolos is a domestic route in the Cyclades and is operated by Zante Ferries.
Book a Kythnos to Kimolos ferry today with AFerry. Just use the form above and choose the route that you want. If nothing appears automatically, start typing Kythnos. You can also type the country or even the name of the ferry company you are interested in. When you have the route that you want, choose single or return and all the other options you want.
How we compare ferries, prices and times for Kythnos to Kimolos
If there is more than one ferry company operating on the Kythnos Kimolos route we will show you all the ferry companies, to make sure you get our best price. We'll also show you any routes similar to Kythnos to Kimolos so you have the complete picture when making your booking. And of course you'll also see a range of times just in case it's a bit cheaper earlier or later than your preferred booking time.
How you get your ticket and how you can make changes if you need to
Once you've chosen your perfect sailing and have made your booking we'll email you your booking confirmation for your Kythnos to Kimolos ferry. The majority of tickets have instant confirmation.
We will also email you details about how you can contact us using our messaging service, as well as details about how you can change your ticket. Most of the time you can do this by yourself. The vast majority of our customers give us a review of four or five stars showing that their very happy with our service and communication.
Below you can see the ferry company or companies that sail on the Kythnos to Kimolos route and the journey times. You might also see some recent prices our customers have found. The best way to find a cheap Kythnos to Kimolos ferry though is to use the form above today to see all of our possible choices.
Special Offers
About Kythnos
Kythnos ferry port lies on the Greek island in the Western part of Cyclades. Kythnos has an area of 100 square kilometres with two significant villages Messaria and Driopis. Kythnos has a varied landscape with rocky terrain and miles of sandy beaches.
The picturesque villages in Kythnos are very different to each other in terms of architecture and scenic beauty and are well worth exploring. There are about 70 beaches in Kythnos but most of them are inaccessible due to the terrain. Kolona with the sea lapping on either sides, Episkopi and Apokroussi are the most popular beaches on Kythnos.
There are many local taverns and cafes around the harbour and the villages that provide traditional Greek food. Kythnos has also excellent accommodation facilities with fantastic views from anywhere. You can also do some shopping in little shops on the island selling hand painted leather, wooden and ceramic goods.
Kythnos offers a Greek island holiday experience with a difference. The locals are very friendly and the atmosphere is very laid back perfectly suited for a relaxed holiday.
Loutra resort in Kythnos is famous for its warm sulphurous spa-waters renowned for its healing powers. Some of the other interesting sites worth a visit in Kythnos are the Church of Trinity in the island's capital Chora and the Driopis village with winding streets and calm pleasant atmosphere.
About Kimolos
Kimolos provides a tranquil holiday destination with quiet bars and taverns serving traditional Greek food in Chora and along the harbour. A variety of pizza called "Ladenia" is a speciality of Kimolos which is certainly well worth a try.
Kimolos is a volcanic mountainous island with lots of white cliffs, breathtaking landscapes, natural caves and secluded sandy beaches. The islands economy depends on the export of chalk and fishing to some extent.
Tourism isn't as developed in Kimolos as in the rest of the Greek islands and hence it is a getaway destination for those who prefer peace and quiet.
Getting the best price for your Kythnos to Kimolos ferry
With AFerry we always give you our best prices for ferries from Kythnos to Kimolos. No matter which page you book from we always include all our special offers. And there is no need to look for a discount code. If we have an offer available, your ferry price will include the reduction or offer. There's no need to look at other websites.
If you're not sure if the Kythnos to Kimolos route is right for you or you can't decide between ferry companies, if there is more than one, you might also find it useful to read any reviews we have available. We ask all our customers to send us reviews for Kythnos to Kimolos ferries. Remember though, that the earlier you book, the cheaper prices normally are. So don't spend too long deciding! Kythnos to Kimolos is a popular route, so we advise you to book as soon as possible.


text:
NH House voting whether to bar unions from collecting bargaining costs from nonunion workers
CONCORD, N.H. (AP) � New Hampshire's House is again voting whether to bar employers from negotiating contracts with unions that collect administrative fees from nonunion workers.
The House votes on the bill on Wednesday.
New Hampshire labor leaders, workers and community members oppose the bill introduced by former House Speaker William O'Brien, a Mont Vernon Republican.
Supporters argue it is wrong to force workers to pay the fees as a condition of employment even if it is part of a collective bargaining agreement negotiated between workers and their employer.
Legislators defeated a similar bill last year. Gov. John Lynch vetoed a bill in 2011.
Like the previous bills, the current bill would permit non-union employees to abstain from paying union dues for contract negotiations.


text:
Jessica at Quirky Bookworm is hosting a Classics Catch-Up Challenge. Somehow I missed reading most of the novels on her list, so I thought I'd make myself a more well-rounded, cultured individual by taking part in the challenge. A little positive peer pressure, right?
The first book up is Leo Tolstoy's Anna Karenina. And I failed. I read 34 of the 800+ pages. Here are some of the things I did instead of reading Anna Karenina:
- crafted with Toddler Train Man
- read blogs and lots of books
- played trains. a LOT!
- cleaned the bathroom
- scrubbed the floor. on my hands and knees.
I just couldn't get into the book. The book was originally published as a series in a magazine, so it probably needed to have a lot of repetition in that format. In a book, not so much. I thought the story line—love, hijinks, families—would be right up my alley, but I guess my 21st century expectations were too fast for the 19th century novel. I think if the action could be distilled to its essence—maybe 200 pages or so—I'd enjoy it.
My secret is out. I'd rather clean my house than read this classic. I was reminded of a post I read on Edge of Story about required reading. When you have to read something, is some of the joy automatically taken out? And does calling a book a "classic" make it more scholarly/less fun? And how clean would my house be if I'd persevered through all of Anna Karenina? We'll never know.
Have you read Anna Karenina? What are your favorite classics?


text:
Today in History
Today is Tuesday, Feb. 5, the 36th day of 2013. There are 329 days left in the year.
Today's Highlight in History:
On Feb. 5, 1973, services were held at Arlington National Cemetery for U.S. Army Col. William B. Nolde, the last official American combat casualty before the Vietnam cease-fire took effect.
On this date:
In 1783, Sweden recognized the independence of the United States.
In 1811, George, the Prince of Wales, was named Prince Regent due to the mental illness of his father, Britain's King George III.
In 1887, Verdi's opera "Otello" premiered at La Scala.
In 1917, Congress passed, over President Woodrow Wilson's veto, an immigration act severely curtailing the influx of Asians. Mexico's constitution was adopted.
In 1922, the first edition of Reader's Digest was published.
In 1940, Glenn Miller and his orchestra recorded "Tuxedo Junction" for RCA Victor's Bluebird label.
In 1953, Walt Disney's animated feature "Peter Pan" was first released.
In 1967, "The Smothers Brothers Comedy Hour" premiered on CBS-TV.
In 1971, Apollo 14 astronauts Alan Shepard and Edgar Mitchell stepped onto the surface of the moon in the first of two lunar excursions.
In 1983, former Nazi Gestapo official Klaus Barbie, expelled from Bolivia, was brought to Lyon (lee-OHN'), France, to stand trial. (He was convicted of war crimes and sentenced to life in prison; he died in 1991.)
In 1988, the Arizona House impeached Gov. Evan Mecham, setting the stage for his trial in the state Senate, where he was convicted of obstructing justice and misusing funds.
Ten years ago: Secretary of State Colin Powell urged the U.N. Security Council to move against Saddam Hussein, saying Iraq had failed to disarm, was harboring terrorists and was hiding behind a "web of lies." Longtime CBS News radio reporter Larry LeSueur died in Washington at age 93.
Five years ago: John McCain seized command of the race for the Republican presidential nomination, winning delegate-rich primaries from the East Coast to California on Super Tuesday; Democratic rivals Hillary Rodham Clinton and Barack Obama traded victories. Maharishi Mahesh Yogi, a guru to the Beatles who introduced the West to transcendental meditation, died at his home in the Dutch town of Vlodrop.
One year ago: Josh Powell, long identified as a person of interest in the 2009 disappearance of his wife, Susan, set fire to his home in Graham, Wash., killing himself and his two sons, 7-year-old Charles and 5-year-old Braden, who had shown up for a supervised visit.
Today's Birthdays: Country singer Claude King is 90. The Rev. Andrew M. Greeley is 85. Baseball Hall-of-Famer Hank Aaron is 79. Actor Stuart Damon is 76. Tony-winning playwright John Guare is 75. Financial writer Jane Bryant Quinn is 74. Actor David Selby is 72. Singer-songwriter Barrett Strong is 72. Football Hall-of-Famer Roger Staubach is 71. Singer Cory Wells (Three Dog Night) is 71. Movie director Michael Mann is 70. Rock singer Al Kooper is 69. Actress Charlotte Rampling is 67. Racing Hall-of-Famer Darrell Waltrip is 66. Actress Barbara Hershey is 65. Actor Christopher Guest is 65. Actor Tom Wilkinson is 65. Actor-comedian Tim Meadows is 52. Actress Jennifer Jason Leigh is 51. Actress Laura Linney is 49. Rock musician Duff McKagan (Velvet Revolver) is 49. World Golf Hall-of-Famer Jose Maria Olazabal is 47. Actor-comedian Chris Parnell is 46. Rock singer Chris Barron (Spin Doctors) is 45. Singer Bobby Brown is 44. Actor Michael Sheen is 44. Actor-singer Darren Criss (TV: "Glee") is 26.
Actor Jeremy Sumpter is 24.
Thought for Today: "Men do not desire to be rich, but to be richer than other men." -- John Stuart Mill, English philosopher and economist (1806-1873).


text:
In 72 hours, we could finally see the beginning of the end of the 'war on drugs'. This expensive war has completely failed to curb the plague of drug addiction, while costing countless lives, devastating communities, and funneling trillions of dollars into violent organized crime networks.
Experts all agree that the most sensible policy is to regulate, but politicians are afraid to touch the issue. In days, a global commission including former heads of state and foreign policy chiefs of the UN, EU, US, Brazil, Mexico and more will break the taboo and publicly call for new approaches including decriminalization and regulation of drugs.
This could be a once-in-a-generation tipping-point moment -- if enough of us call for an end to this madness. Politicians say they understand that the war on drugs has failed, but claim the public isn't ready for an alternative. Let's show them we not only accept a sane and humane policy -- we demand it. Sign the petition and share with everyone -- when we reach 1/2 million, it will be personally delivered to world leaders by the global commission.
Sign the petition to end the war on drugs
Forest is people. People is you. You is us.
Post Reply
4 posts • Page 1 of 1
Sign the petition to end the war on drugs
Re: Sign the petition to end the war on drugs
http://transform-drugs.blogspot.com/201 ... a-and.html
War on Drugs - Obama and Cameron can leave a legacy of peace
War on Drugs - Obama and Cameron can leave a legacy of peace
On Thursday 2 June the Global Commission on Drug Policy, a panel of world leaders and politicians, will host a press conference at the Waldorf Astoria Hotel in New York to launch a report that describes the drug war as a failure, and calls for a paradigm shift in global drug policy, including the decriminalisation and legal regulation of drugs.
Transform Drug Policy Foundation welcomes the report, because fifty years of global prohibition have resulted in massive levels of crime, destabilised entire nation states, created huge health harms, criminalised 250 million users, and wasted trillions of dollars.
Danny Kushlick, Head of External Affairs said: "This report is a watershed moment that puts legal regulation of drugs onto the mainstream political agenda worldwide.
"Globally we spend $100 billion a year on the war on drugs, so if we carry on as we are, over the next decade we will waste a trillion dollars increasing insecurity, damaging development and promoting crime and ill-health in some of the most disadvantaged places on earth.
"We call on UK party political leaders to call a ceasefire in their political point scoring, and instead unite to explore peaceful and effective alternatives to the war on drugs.
"The UK Government is also in the perfect position to bring the US to the table to negotiate an end to the war on drugs and a Marshall Plan to consolidate the peace. In 2002 David Cameron called for the UN to debate legal regulation, and in 2004 President Obama described the war on drugs as an "utter failure". Cameron and Obama now have the greatest opportunity ever to use the 'essential relationship' to find a peaceful solution to the longest conflict of modern times. Ending the war on drugs and bringing peace to some of the most violent places in the world would be a truly great legacy."
Re: Sign the petition to end the war on drugs
Signed...doubt it will turn into anything but hey :p
Re: Sign the petition to end the war on drugs
No doubt..
As this article points out, the only time a politician ever talks sense on this issue is either before or after they are in power.
Many agree, none act: to ease untold misery, legalise drugs
http://www.guardian.co.uk/commentisfree ... lise-drugs
As this article points out, the only time a politician ever talks sense on this issue is either before or after they are in power.
Many agree, none act: to ease untold misery, legalise drugs
http://www.guardian.co.uk/commentisfree ... lise-drugs
The arguments for legalisation are overwhelming. They do not rest on approval of drugs, or ignorance of their harms, or any wish to see their consumption increase. They are based on the argument that regulation would be less harmful to drug users, less damaging to society and less expensive to taxpayers than outright prohibition. Nobody disputes the dangers of drugs, only the best ways of controlling them.
All drugs become more dangerous when banned. First, because consumers have no protection from adulteration and often have no idea of the strength and quality of what they are buying. And second, because vendors favour more concentrated forms which are less bulky and easier to transport and hide.
The arguments over drugs are done and dusted. Any independent body that looks at the evidence comes to similar conclusions. So why do political leaders refuse to countenance more than minor tinkering with the law, such as yo-yoing cannabis between classes B and C? One answer is that as Steve Rolles, senior policy analyst at Transform Drugs Policy, puts it, drugs have been presented as an existential threat and the war against them almost as a religious crusade. In the popular mind, drug users have always been demonised as what sociologists call "the other": Chinese gangsters, Caribbean immigrants, 60s hippies or other threats to the social order. Anyone who proposes ending the war risks being characterised by opponents, particularly in the downmarket media, as weak and cowardly, lacking the Churchillian spirit of "no surrender". History does not look kindly on those who lose wars.
Post Reply
4 posts • Page 1 of 1


text:
*The TrueSizer Pro introductory price of $59 USD is only valid until 30th June 2014.
Not sure whether you should use TrueSizer desktop software or TrueSizer web?
Here are the details on how they differ.
By the way, you may choose to use both versions. Use TrueSizer Web when you're away from your desk, save to your Microsoft SkyDrive, and the files will be waiting for you on your desktop computer!
Wilcom's original viewing software is an industry favorite for viewing, sizing and converting embroidery files. Available as a Desktop download and Web application, TrueSizer allows you to not only view embroidery files but also make adjustments such as achieving quality scaling and re-sizing as well as the ability to convert files to a wide range of formats. The latest addition to the TrueSizer family, TrueSizer Pro, gives you even more power and control over designs, including the ability to view multiple designs and create multiple colorways, as well as viewing designs on garments and printing design approval sheets for easy customer approvals.
You can now do even more with TrueSizer:
The newest addition to the TrueSizer range, TrueSizer Pro is the most powerful version yet. TrueSizer Pro includes all the functions of the original TrueSizer plus great new features as well. These include the ability to work on multiple designs, create multiple colorways and view your designs in hoops. TrueSizer Pro can also help to improve the customer approval process, allowing designs to be visualized on garments and to be shared with staff and customers via design approval sheets.
This free software makes it easy for Wilcom customers and their customers to work with Wilcom .EMB files.With hundreds of thousands of TrueSizer registered users (and counting!), it's safe to say that it has become an industry standard for viewing, sizing and converting embroidery files.
You can also access your embroidery files on the go! Wilcom's TrueSizer Web is a free web app which you can access on your PC, Mac and mobile devices such as iPad or Android devices.
Work with Wilcom .EMB files without the need for a digitizing system, and without having to download any software. Work with designs on your local computer, or directly to your Microsoft SkyDrive cloud storage account.
Note: Truesizer Web has slightly less functionality than the downloadable desktop TrueSizer application.
Open, view and size any supported embroidery file and then convert it to a wide range of formats. If you find a CND file you like, open it in TrueSizer, scale it to fit your intended purpose, and save it as a .DST file. TrueSizer opens over 40 file formats and saves files to over 20 formats. Save your files in Wilcom's all in one EMB format, or in formats compatible with 30 embroidery and sewing machines.
The ability to access and modify designs is central to all activities in the embroidery company. TrueSizer uses Wilcom's original .EMB file format, the only one in the industry to include both object outlines and stitches. So, it scales to perfection, recalculating the stitches from the outlines and the object properties.
Obtaining customer approval for a design can be time-consuming and expensive. Give customers TrueSizer and they can receive .EMB files instantly by email, check designs in TrueView and give immediate feedback. They can even do their own simple editing.
Locating designs, printing production worksheets and writing production disks doesn't need to be done by the digitizer.
TrueSizer enables other team members to create customer approval and production worksheets and write embroidery disks (particularly useful in businesses with multiple embroidery machine brands/formats).
EMB files can be readily converted to other formats so you don't have to switch back and forth between different programs.
Thread breaks and poor start-/end-point positioning are common causes of production inefficiency. TrueSizer includes small stitch filter and auto start/end control features so production staff can modify designs quickly and efficiently on the factory floor.
Because EMB format combines original outlines (condensed data) with the full original stitch data, customers will receive designs exactly as they were created – complete with any fine-tuning stitch edits that may be included. They can still resize the design from the original outlines with guaranteed rescaling. No confusion switching between multiple expanded and condensed files.
TrueSizer Pro gives you the ability to work on several designs simultaneously, allowing you to open as many designs as you like within the same screen. This can be useful when needing to refer to multiple designs or when showcasing design options to customers.
Create and save multiple colorways in .EMB designs and match threads to all color slots in the current colorways. You can also change and match colors in your .EMB, .ART and .JAN designs based on colorways.
Being able to view designs on garments is a vital part of the design, approval and production process. With over 50 product templates to choose from TrueSizer Pro allows you to visualize your design in the correct size and location on your garment. When it comes to production there are over 60 hoops to choose from so that you can visualize and adjust the design according to your machine hoops.
Customer approvals are often difficult and time consuming but with TrueSizer Pro, you can print and share design approval sheets showing design size and location on garments, for easy approvals.
As part of Wilcom's Elements 3 product suite, TrueSizer e3 contains many new valuable features...
TrueSizer isn't just for embroidery! View designs that contain bling, sequins, printed elements and applique fabric. The file also include the multiple colorways.
- Wilcom EMB
- Bernina ART
- Janome JAN
You'll love the bigger, brighter buttons, improved menus and toolbars layout and enhanced tooltips to show you how to use features on the fly!
Read, scale and convert designs from your PC, Mac or mobile device web browser!
Check whether you have the right hardware to ensure the software runs at its best.
We support all main-stream browsers listed below. Please ensure you have the latest customer release versions of the following browsers.
Here's the list of all the embroidery file formats supported by Wilcom TrueSizer e3.
Object files are high-level digitizing system CAD formats which contain object outlines, object properties and in Wilcom's case, also stitch data. When you open an original digitized design file in Wilcom TrueSizer, it can be accurately resized while preserving the original stitching effects and correct densities.
Stitch or 'expanded' designs are low-level formats for direct use by embroidery machines. They contain only stitch coordinates and machine functions. Stitch files are generally not suited to resizing. Because the stitch count does not change, the density increases or decreases with the design size. Thus you should scale stitch designs by no more than ±5-10% because the densities scale by the same amount.
Join the TrueSizer User Community Forum on EmbroideryStartup.com
TrueSizer Desktop: Open the software, click on Help and select Onscreen Help
TrueSizer Web: Open the software, click on Help and select Instructions


text:
Performance and Efficiency
- Timing your UDFs
- Combiner
- Hash-based Aggregation in Map Task
- Memory Management
- Reducer Estimation
- Multi-Query Execution
- Optimization Rules
Performance Enhancers
- Use Optimization
- Use Types
- Project Early and Often
- Filter Early and Often
- Reduce Your Operator Pipeline
- Make Your UDFs Algebraic
- Use the Accumulator Interface
- Drop Nulls Before a Join
- Take Advantage of Join Optimizations
- Use the Parallel Features
- Use the LIMIT Operator
- Prefer DISTINCT over GROUP BY/GENERATE
- Compress the Results of Intermediate Jobs
- Combine Small Input Files
- Specialized Joins
Timing your UDFs
The first step to improving performance and efficiency is measuring where the time is going. Pig provides a light-weight method for approximately measuring how much time is spent in different user-defined functions (UDFs) and Loaders. Simply set the pig.udf.profile property to true. This will cause new counters to be tracked for all Map-Reduce jobs generated by your script: approx_microsecs measures the approximate amount of time spent in a UDF, and approx_invocations measures the approximate number of times the UDF was invoked. Note that this may produce a large number of counters (two per UDF). Excessive amounts of counters can lead to poor JobTracker performance, so use this feature carefully, and preferably on a test cluster.
The Pig combiner is an optimizer that is invoked when the statements in your scripts are arranged in certain ways. The examples below demonstrate when the combiner is used and not used. Whenever possible, make sure the combiner is used as it frequently yields an order of magnitude improvement in performance.
When the Combiner is Used
The combiner is generally used in the case of non-nested foreach where all projections are either expressions on the group column or expressions on algebraic UDFs (see Make Your UDFs Algebraic).
A = load 'studenttab10k' as (name, age, gpa); B = group A by age; C = foreach B generate ABS(SUM(A.gpa)), COUNT(org.apache.pig.builtin.Distinct(A.name)), (MIN(A.gpa) + MAX(A.gpa))/2, group.age; explain C;
In the above example:
- The GROUP statement can be referred to as a whole or by accessing individual fields (as in the example).
- The GROUP statement and its elements can appear anywhere in the projection.
In the above example, a variety of expressions can be applied to algebraic functions including:
- A column transformation function such as ABS can be applied to an algebraic function SUM.
- An algebraic function (COUNT) can be applied to another algebraic function (Distinct), but only the inner function is computed using the combiner.
- A mathematical expression can be applied to one or more algebraic functions.
You can check if the combiner is used for your query by running EXPLAIN on the FOREACH alias as shown above. You should see the combine section in the MapReduce part of the plan:
..... Combine Plan B: Local Rearrange[tuple]{bytearray}(false) - scope-42 | | | Project[bytearray][0] - scope-43 | |---C: New For Each(false,false,false)[bag] - scope-28 | | | Project[bytearray][0] - scope-29 | | | POUserFunc(org.apache.pig.builtin.SUM$Intermediate)[tuple] - scope-30 | | | |---Project[bag][1] - scope-31 | | | POUserFunc(org.apache.pig.builtin.Distinct$Intermediate)[tuple] - scope-32 | | | |---Project[bag][2] - scope-33 | |---POCombinerPackage[tuple]{bytearray} - scope-36-------- .....
The combiner is also used with a nested foreach as long as the only nested operation used is DISTINCT (see FOREACH and Example: Nested Block).
A = load 'studenttab10k' as (name, age, gpa); B = group A by age; C = foreach B { D = distinct (A.name); generate group, COUNT(D);}
Finally, use of the combiner is influenced by the surrounding environment of the GROUP and FOREACH statements.
When the Combiner is Not Used
The combiner is generally not used if there is any operator that comes between the GROUP and FOREACH statements in the execution plan. Even if the statements are next to each other in your script, the optimizer might rearrange them. In this example, the optimizer will push FILTER above FOREACH which will prevent the use of the combiner:
A = load 'studenttab10k' as (name, age, gpa); B = group A by age; C = foreach B generate group, COUNT (A); D = filter C by group.age <30;
Please note that the script above can be made more efficient by performing filtering before the GROUP statement:
A = load 'studenttab10k' as (name, age, gpa); B = filter A by age <30; C = group B by age; D = foreach C generate group, COUNT (B);
Note: One exception to the above rule is LIMIT. Starting with Pig 0.9, even if LIMIT comes between GROUP and FOREACH, the combiner will still be used. In this example, the optimizer will push LIMIT above FOREACH but this will not prevent the use of the combiner.
A = load 'studenttab10k' as (name, age, gpa); B = group A by age; C = foreach B generate group, COUNT (A); D = limit C 20;
The combiner is also not used in the case where multiple FOREACH statements are associated with the same GROUP:
A = load 'studenttab10k' as (name, age, gpa); B = group A by age; C = foreach B generate group, COUNT (A); D = foreach B generate group, MIN (A.gpa). MAX(A.gpa); .....
Depending on your use case, it might be more efficient (improve performance) to split your script into multiple scripts.
Hash-based Aggregation in Map Task
To improve performance, hash-based aggregation will aggregate records in the map task before sending them to the combiner. This optimization reduces the serializing/deserializing costs of the combiner by sending it fewer records.
Turning On Off
Hash-based aggregation has been shown to improve the speed of group-by operations by up to 50%. However, since this is a very new feature, it is currently turned OFF by default. To turn it ON, set the property pig.exec.mapPartAgg to true.
If the group-by keys used for grouping don't result in a sufficient reduction in the number of records, the performance might be worse with this feature turned ON. To prevent this from happening, the feature turns itself off if the reduction in records sent to combiner is not more than a configurable threshold. This threshold can be set using the property pig.exec.mapPartAgg.minReduction. It is set to a default value of 10, which means that the number of records that get sent to the combiner should be reduced by a factor of 10 or more.
Memory Management
Pig allocates a fix amount of memory to store bags and spills to disk as soon as the memory limit is reached. This is very similar to how Hadoop decides when to spill data accumulated by the combiner.
The amount of memory allocated to bags is determined by pig.cachedbag.memusage; the default is set to 20% (0.2) of available memory. Note that this memory is shared across all large bags used by the application.
Reducer Estimation
By default Pig determines the number of reducers to use for a given job based on the size of the input to the map phase. The input data size is divided by the pig.exec.reducers.bytes.per.reducer parameter value (default 1GB) to determine the number of reducers. The maximum number of reducers for a job is limited by the pig.exec.reducers.max parameter (default 999).
The default reducer estimation algorithm described above can be overridden by setting the pig.exec.reducer.estimator parameter to the fully qualified class name of an implementation of org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigReducerEstimator. The class must exist on the classpath of the process submitting the Pig job. If the pig.exec.reducer.estimator.arg parameter is set, the value will be passed to a constructor of the implementing class that takes a single String.
Multi-Query Execution
With multi-query execution Pig processes an entire script or a batch of statements at once.
Turning it On or Off
Multi-query execution is turned on by default. To turn it off and revert to Pig's "execute-on-dump/store" behavior, use the "-M" or "-no_multiquery" options.
To run script "myscript.pig" without the optimization, execute Pig as follows:
$ pig -M myscript.pig or $ pig -no_multiquery myscript.pig
How it Works
Multi-query execution introduces some changes:
For batch mode execution, the entire script is first parsed to determine if intermediate tasks can be combined to reduce the overall amount of work that needs to be done; execution starts only after the parsing is completed (see the EXPLAIN operator and the run and exec commands).
Two run scenarios are optimized, as explained below: explicit and implicit splits, and storing intermediate results.
Explicit and Implicit Splits
There might be cases in which you want different processing on separate parts of the same data stream.
Example 1:
Example 2:
In prior Pig releases, Example 1 will dump A' to disk and then start jobs for B' and C'. Example 2 will execute all the dependencies of B' and store it and then execute all the dependencies of C' and store it. Both are equivalent, but the performance will be different.
Here's what the multi-query execution does to increase the performance:
For Example 2, adds an implicit split to transform the query to Example 1. This eliminates the processing of A' multiple times.
Makes the split non-blocking and allows processing to continue. This helps reduce the amount of data that has to be stored right at the split.
Allows multiple outputs from a job. This way some results can be stored as a side-effect of the main job. This is also necessary to make the previous item work.
Allows multiple split branches to be carried on to the combiner/reducer. This reduces the amount of IO again in the case where multiple branches in the split can benefit from a combiner run.
Storing Intermediate Results
Sometimes it is necessary to store intermediate results.
If the script doesn't re-load A' for the processing of A the steps above A' will be duplicated. This is a special case of Example 2 above, so the same steps are recommended. With multi-query execution, the script will process A and dump A' as a side-effect.
Store vs. Dump
With multi-query exection, you want to use STORE to save (persist) your results. You do not want to use DUMP as it will disable multi-query execution and is likely to slow down execution. (If you have included DUMP statements in your scripts for debugging purposes, you should remove them.)
DUMP Example: In this script, because the DUMP command is interactive, the multi-query execution will be disabled and two separate jobs will be created to execute this script. The first job will execute A > B > DUMP while the second job will execute A > B > C > STORE.
A = LOAD 'input' AS (x, y, z); B = FILTER A BY x > 5; DUMP B; C = FOREACH B GENERATE y, z; STORE C INTO 'output';
STORE Example: In this script, multi-query optimization will kick in allowing the entire script to be executed as a single job. Two outputs are produced: output1 and output2.
A = LOAD 'input' AS (x, y, z); B = FILTER A BY x > 5; STORE B INTO 'output1'; C = FOREACH B GENERATE y, z; STORE C INTO 'output2';
Error Handling
With multi-query execution Pig processes an entire script or a batch of statements at once. By default Pig tries to run all the jobs that result from that, regardless of whether some jobs fail during execution. To check which jobs have succeeded or failed use one of these options.
First, Pig logs all successful and failed store commands. Store commands are identified by output path. At the end of execution a summary line indicates success, partial failure or failure of all store commands.
Second, Pig returns different code upon completion for these scenarios:
Return code 0: All jobs succeeded
Return code 1: Used for retrievable errors
Return code 2: All jobs have failed
Return code 3: Some jobs have failed
In some cases it might be desirable to fail the entire script upon detecting the first failed job. This can be achieved with the "-F" or "-stop_on_failure" command line flag. If used, Pig will stop execution when the first failed job is detected and discontinue further processing. This also means that file commands that come after a failed store in the script will not be executed (this can be used to create "done" files).
This is how the flag is used:
$ pig -F myscript.pig or $ pig -stop_on_failure myscript.pig
Backward Compatibility
Most existing Pig scripts will produce the same result with or without the multi-query execution. There are cases though where this is not true. Path names and schemes are discussed here.
Any script is parsed in it's entirety before it is sent to execution. Since the current directory can change throughout the script any path used in LOAD or STORE statement is translated to a fully qualified and absolute path.
In map-reduce mode, the following script will load from "hdfs://<host>:<port>/data1" and store into "hdfs://<host>:<port>/tmp/out1".
cd /; A = LOAD 'data1'; cd tmp; STORE A INTO 'out1';
These expanded paths will be passed to any LoadFunc or Slicer implementation. In some cases this can cause problems, especially when a LoadFunc/Slicer is not used to read from a dfs file or path (for example, loading from an SQL database).
Solutions are to either:
Specify "-M" or "-no_multiquery" to revert to the old names
Specify a custom scheme for the LoadFunc/Slicer
Arguments used in a LOAD statement that have a scheme other than "hdfs" or "file" will not be expanded and passed to the LoadFunc/Slicer unchanged.
In the SQL case, the SQLLoader function is invoked with 'sql://mytable'.
A = LOAD 'sql://mytable' USING SQLLoader();
Implicit Dependencies
If a script has dependencies on the execution order outside of what Pig knows about, execution may fail.
In this script, MYUDF might try to read from out1, a file that A was just stored into. However, Pig does not know that MYUDF depends on the out1 file and might submit the jobs producing the out2 and out1 files at the same time.
... STORE A INTO 'out1'; B = LOAD 'data2'; C = FOREACH B GENERATE MYUDF($0,'out1'); STORE C INTO 'out2';
To make the script work (to ensure that the right execution order is enforced) add the exec statement. The exec statement will trigger the execution of the statements that produce the out1 file.
... STORE A INTO 'out1'; EXEC; B = LOAD 'data2'; C = FOREACH B GENERATE MYUDF($0,'out1'); STORE C INTO 'out2';
In this script, the STORE/LOAD operators have different file paths; however, the LOAD operator depends on the STORE operator.
A = LOAD '/user/xxx/firstinput' USING PigStorage(); B = group .... C = .... agrregation function STORE C INTO '/user/vxj/firstinputtempresult/days1'; .. Atab = LOAD '/user/xxx/secondinput' USING PigStorage(); Btab = group .... Ctab = .... agrregation function STORE Ctab INTO '/user/vxj/secondinputtempresult/days1'; .. E = LOAD '/user/vxj/firstinputtempresult/' USING PigStorage(); F = group .... G = .... aggregation function STORE G INTO '/user/vxj/finalresult1'; Etab =LOAD '/user/vxj/secondinputtempresult/' USING PigStorage(); Ftab = group .... Gtab = .... aggregation function STORE Gtab INTO '/user/vxj/finalresult2';
To make the script works, add the exec statement.
A = LOAD '/user/xxx/firstinput' USING PigStorage(); B = group .... C = .... agrregation function STORE C INTO '/user/vxj/firstinputtempresult/days1'; .. Atab = LOAD '/user/xxx/secondinput' USING PigStorage(); Btab = group .... Ctab = .... agrregation function STORE Ctab INTO '/user/vxj/secondinputtempresult/days1'; EXEC; E = LOAD '/user/vxj/firstinputtempresult/' USING PigStorage(); F = group .... G = .... aggregation function STORE G INTO '/user/vxj/finalresult1'; .. Etab =LOAD '/user/vxj/secondinputtempresult/' USING PigStorage(); Ftab = group .... Gtab = .... aggregation function STORE Gtab INTO '/user/vxj/finalresult2';
Optimization Rules
Pig supports various optimization rules, all of which are enabled by default. To disable all or specific optimizations, use one or more of the following methods. Note some optimization rules are mandatory and cannot be disabled.
- The pig.optimizer.rules.disabled pig property, which accepts a comma-separated list of optimization rules to disable; the all keyword disables all non-mandatory optimizations. (e.g.: set pig.optimizer.rules.disabled 'ColumnMapKeyPrune';)
- The -t, -optimizer_off command-line options. (e.g.: pig -optimizer_off [opt_rule | all])
FilterLogicExpressionSimplifier is an exception to the above. The rule is disabled by default, and enabled by setting the pig.exec.filterLogicExpressionSimplifier pig property to true.
Push the filter condition to loader.
A = LOAD 'input' as (dt, state, event) using HCatLoader(); B = FILTER A BY dt=='201310' AND state=='CA';
Filter condition will be pushed to loader if loader supports (Usually the loader is partition aware, such as HCatLoader)
A = LOAD 'input' as (dt, state, event) using HCatLoader(); --Filter is removed
Loader will be instructed to loader the partition with dt=='201310' and state=='CA'
This rule simplifies the expression in filter statement.
1) Constant pre-calculation B = FILTER A BY a0 > 5+7; is simplified to B = FILTER A BY a0 > 12; 2) Elimination of negations B = FILTER A BY NOT (NOT(a0 > 5) OR a > 10); is simplified to B = FILTER A BY a0 > 5 AND a <= 10; 3) Elimination of logical implied expression in AND B = FILTER A BY (a0 > 5 AND a0 > 7); is simplified to B = FILTER A BY a0 > 7; 4) Elimination of logical implied expression in OR B = FILTER A BY ((a0 > 5) OR (a0 > 6 AND a1 > 15); is simplified to B = FILTER C BY a0 > 5; 5) Equivalence elimination B = FILTER A BY (a0 v 5 AND a0 > 5); is simplified to B = FILTER A BY a0 > 5; 6) Elimination of complementary expressions in OR B = FILTER A BY (a0 > 5 OR a0 <= 5); is simplified to non-filtering 7) Elimination of naive TRUE expression B = FILTER A BY 1==1; is simplified to non-filtering
Split filter conditions so that we can push filter more aggressively.
A = LOAD 'input1' as (a0, a1); B = LOAD 'input2' as (b0, b1); C = JOIN A by a0, B by b0; D = FILTER C BY a1>0 and b1>0;
Here D will be splitted into:
X = FILTER C BY a1>0; D = FILTER X BY b1>0;
So "a1>0" and "b1>0" can be pushed up individually.
The objective of this rule is to push the FILTER operators up the data flow graph. As a result, the number of records that flow through the pipeline is reduced.
A = LOAD 'input'; B = GROUP A BY $0; C = FILTER B BY $0 < 10;
Merge filter conditions after PushUpFilter rule to decrease the number of filter statements.
The objective of this rule is to reduce the number of records that flow through the pipeline by moving FOREACH operators with a FLATTEN down the data flow graph. In the example shown below, it would be more efficient to move the foreach after the join to reduce the cost of the join operation.
A = LOAD 'input' AS (a, b, c); B = LOAD 'input2' AS (x, y, z); C = FOREACH A GENERATE FLATTEN($0), B, C; D = JOIN C BY $1, B BY $1;
The objective of this rule is to push the LIMIT operator up the data flow graph (or down the tree for database folks). In addition, for top-k (ORDER BY followed by a LIMIT) the LIMIT is pushed into the ORDER BY.
A = LOAD 'input'; B = ORDER A BY $0; C = LIMIT B 10;
Prune the loader to only load necessary columns. The performance gain is more significant if the corresponding loader support column pruning and only load necessary columns (See LoadPushDown.pushProjection). Otherwise, ColumnMapKeyPrune will insert a ForEach statement right after loader.
A = load 'input' as (a0, a1, a2); B = ORDER A by a0; C = FOREACH B GENERATE a0, a1;
a2 is irrelevant in this query, so we can prune it earlier. The loader in this query is PigStorage and it supports column pruning. So we only load a0 and a1 from the input file.
ColumnMapKeyPrune also prunes unused map keys:
A = load 'input' as (a0:map[]); B = FOREACH A generate a0#'key1';
Prune unused column as soon as possible. In addition to prune the loader in ColumnMapKeyPrune, we can prune a column as soon as it is not used in the rest of the script
-- Original code: A = LOAD 'input' AS (a0, a1, a2); B = ORDER A BY a0; C = FILTER B BY a1>0;
We can only prune a2 from the loader. However, a0 is never used after "ORDER BY". So we can drop a0 right after "ORDER BY" statement.
-- Optimized code: A = LOAD 'input' AS (a0, a1, a2); B = ORDER A BY a0; B1 = FOREACH B GENERATE a1; -- drop a0 C = FILTER B1 BY a1>0;
The objective of this rule is to merge together two feach statements, if these preconditions are met:
- The foreach statements are consecutive.
- The first foreach statement does not contain flatten.
- The second foreach is not nested.
-- Original code: A = LOAD 'file.txt' AS (a, b, c); B = FOREACH A GENERATE a+b AS u, c-b AS v; C = FOREACH B GENERATE $0+5, v; -- Optimized code: A = LOAD 'file.txt' AS (a, b, c); C = FOREACH A GENERATE a+b+5, c-b;
Force parallel "1" for "group all" statement. That's because even if we set parallel to N, only 1 reducer will be used in this case and all other reducer produce empty result.
A = LOAD 'input'; B = GROUP A all PARALLEL 10;
Performance Enhancers
Use Optimization
Pig supports various optimization rules which are turned on by default. Become familiar with these rules.
Use Types
If types are not specified in the load statement, Pig assumes the type of =double= for numeric computations. A lot of the time, your data would be much smaller, maybe, integer or long. Specifying the real type will help with speed of arithmetic computation. It has an additional advantage of early error detection.
--Query 1 A = load 'myfile' as (t, u, v); B = foreach A generate t + u; --Query 2 A = load 'myfile' as (t: int, u: int, v); B = foreach A generate t + u;
The second query will run more efficiently than the first. In some of our queries with see 2x speedup.
Project Early and Often
Pig does not (yet) determine when a field is no longer needed and drop the field from the row. For example, say you have a query like:
A = load 'myfile' as (t, u, v); B = load 'myotherfile' as (x, y, z); C = join A by t, B by x; D = group C by u; E = foreach D generate group, COUNT($1);
There is no need for v, y, or z to participate in this query. And there is no need to carry both t and x past the join, just one will suffice. Changing the query above to the query below will greatly reduce the amount of data being carried through the map and reduce phases by pig.
A = load 'myfile' as (t, u, v); A1 = foreach A generate t, u; B = load 'myotherfile' as (x, y, z); B1 = foreach B generate x; C = join A1 by t, B1 by x; C1 = foreach C generate t, u; D = group C1 by u; E = foreach D generate group, COUNT($1);
Depending on your data, this can produce significant time savings. In queries similar to the example shown here we have seen total time drop by 50%.
Filter Early and Often
As with early projection, in most cases it is beneficial to apply filters as early as possible to reduce the amount of data flowing through the pipeline.
-- Query 1 A = load 'myfile' as (t, u, v); B = load 'myotherfile' as (x, y, z); C = filter A by t == 1; D = join C by t, B by x; E = group D by u; F = foreach E generate group, COUNT($1); -- Query 2 A = load 'myfile' as (t, u, v); B = load 'myotherfile' as (x, y, z); C = join A by t, B by x; D = group C by u; E = foreach D generate group, COUNT($1); F = filter E by C.t == 1;
The first query is clearly more efficient than the second one because it reduces the amount of data going into the join.
One case where pushing filters up might not be a good idea is if the cost of applying filter is very high and only a small amount of data is filtered out.
Reduce Your Operator Pipeline
For clarity of your script, you might choose to split your projects into several steps for instance:
A = load 'data' as (in: map[]); -- get key out of the map B = foreach A generate in#'k1' as k1, in#'k2' as k2; -- concatenate the keys C = foreach B generate CONCAT(k1, k2); .......
While the example above is easier to read, you might want to consider combining the two foreach statements to improve your query performance:
A = load 'data' as (in: map[]); -- concatenate the keys from the map B = foreach A generate CONCAT(in#'k1', in#'k2'); ....
The same goes for filters.
Make Your UDFs Algebraic
Queries that can take advantage of the combiner generally ran much faster (sometimes several times faster) than the versions that don't. The latest code significantly improves combiner usage; however, you need to make sure you do your part. If you have a UDF that works on grouped data and is, by nature, algebraic (meaning their computation can be decomposed into multiple steps) make sure you implement it as such. For details on how to write algebraic UDFs, see Algebraic Interface.
A = load 'data' as (x, y, z) B = group A by x; C = foreach B generate group, MyUDF(A); ....
If MyUDF is algebraic, the query will use combiner and run much faster. You can run explain command on your query to make sure that combiner is used.
Use the Accumulator Interface
If your UDF can't be made Algebraic but is able to deal with getting input in chunks rather than all at once, consider implementing the Accumulator interface to reduce the amount of memory used by your script. If your function is Algebraic and can be used on conjunction with Accumulator functions, you will need to implement the Accumulator interface as well as the Algebraic interface. For more information, see Accumulator Interface.
Note: Pig automatically chooses the interface that it expects to provide the best performance: Algebraic > Accumulator > Default.
Drop Nulls Before a Join
With the introduction of nulls, join and cogroup semantics were altered to work with nulls. The semantic for cogrouping with nulls is that nulls from a given input are grouped together, but nulls across inputs are not grouped together. This preserves the semantics of grouping (nulls are collected together from a single input to be passed to aggregate functions like COUNT) and the semantics of join (nulls are not joined across inputs). Since flattening an empty bag results in an empty row (and no output), in a standard join the rows with a null key will always be dropped.
This join
A = load 'myfile' as (t, u, v); B = load 'myotherfile' as (x, y, z); C = join A by t, B by x;
is rewritten by Pig to
A = load 'myfile' as (t, u, v); B = load 'myotherfile' as (x, y, z); C1 = cogroup A by t INNER, B by x INNER; C = foreach C1 generate flatten(A), flatten(B);
Since the nulls from A and B won't be collected together, when the nulls are flattened we're guaranteed to have an empty bag, which will result in no output. So the null keys will be dropped. But they will not be dropped until the last possible moment.
If the query is rewritten to
A = load 'myfile' as (t, u, v); B = load 'myotherfile' as (x, y, z); A1 = filter A by t is not null; B1 = filter B by x is not null; C = join A1 by t, B1 by x;
then the nulls will be dropped before the join. Since all null keys go to a single reducer, if your key is null even a small percentage of the time the gain can be significant. In one test where the key was null 7% of the time and the data was spread across 200 reducers, we saw a about a 10x speed up in the query by adding the early filters.
Take Advantage of Join Optimizations
Regular Join Optimizations
Optimization for regular joins ensures that the last table in the join is not brought into memory but streamed through instead. Optimization reduces the amount of memory used which means you can avoid spilling the data and also should be able to scale your query to larger data volumes.
To take advantage of this optimization, make sure that the table with the largest number of tuples per key is the last table in your query. In some of our tests we saw 10x performance improvement as the result of this optimization.
small = load 'small_file' as (t, u, v); large = load 'large_file' as (x, y, z); C = join small by t, large by x;
Specialized Join Optimizations
Optimization can also be achieved using fragment replicate joins, skewed joins, and merge joins. For more information see Specialized Joins.
Use the Parallel Features
You can set the number of reduce tasks for the MapReduce jobs generated by Pig using two parallel features. (The parallel features only affect the number of reduce tasks. Map parallelism is determined by the input file, one map for each HDFS block.)
You Set the Number of Reducers
Use the set default parallel command to set the number of reducers at the script level.
Alternatively, use the PARALLEL clause to set the number of reducers at the operator level. (In a script, the value set via the PARALLEL clause will override any value set via "set default parallel.") You can include the PARALLEL clause with any operator that starts a reduce phase: COGROUP, CROSS, DISTINCT, GROUP, JOIN (inner), JOIN (outer), and ORDER BY.
The number of reducers you need for a particular construct in Pig that forms a MapReduce boundary depends entirely on (1) your data and the number of intermediate keys you are generating in your mappers and (2) the partitioner and distribution of map (combiner) output keys. In the best cases we have seen that a reducer processing about 1 GB of data behaves efficiently.
Let Pig Set the Number of Reducers
If neither "set default parallel" nor the PARALLEL clause are used, Pig sets the number of reducers using a heuristic based on the size of the input data. You can set the values for these properties:
- pig.exec.reducers.bytes.per.reducer - Defines the number of input bytes per reduce; default value is 1000*1000*1000 (1GB).
- pig.exec.reducers.max - Defines the upper bound on the number of reducers; default is 999.
The formula, shown below, is very simple and will improve over time. The computed value takes all inputs within the script into account and applies the computed value to all the jobs within Pig script.
#reducers = MIN (pig.exec.reducers.max, total input size (in bytes) / bytes per reducer)
In this example PARALLEL is used with the GROUP operator.
A = LOAD 'myfile' AS (t, u, v); B = GROUP A BY t PARALLEL 18; ...
In this example all the MapReduce jobs that get launched use 20 reducers.
SET default_parallel 20; A = LOAD 'myfile.txt' USING PigStorage() AS (t, u, v); B = GROUP A BY t; C = FOREACH B GENERATE group, COUNT(A.t) as mycount; D = ORDER C BY mycount; STORE D INTO 'mysortedcount' USING PigStorage();
Use the LIMIT Operator
Often you are not interested in the entire output but rather a sample or top results. In such cases, using LIMIT can yield a much better performance as we push the limit as high as possible to minimize the amount of data travelling through the pipeline.
A = load 'myfile' as (t, u, v); B = limit A 500;
Top results:
A = load 'myfile' as (t, u, v); B = order A by t; C = limit B 500;
Prefer DISTINCT over GROUP BY/GENERATE
To extract unique values from a column in a relation you can use DISTINCT or GROUP BY/GENERATE. DISTINCT is the preferred method; it is faster and more efficient.
Example using GROUP BY - GENERATE:
A = load 'myfile' as (t, u, v); B = foreach A generate u; C = group B by u; D = foreach C generate group as uniquekey; dump D;
Example using DISTINCT:
A = load 'myfile' as (t, u, v); B = foreach A generate u; C = distinct B; dump C;
Compress the Results of Intermediate Jobs
If your Pig script generates a sequence of MapReduce jobs, you can compress the output of the intermediate jobs using LZO compression. (Use the EXPLAIN operator to determine if your script produces multiple MapReduce Jobs.)
By doing this, you will save HDFS space used to store the intermediate data used by PIG and potentially improve query execution speed. In general, the more intermediate data that is generated, the more benefits in storage and speed that result.
You can set the value for these properties:
- pig.tmpfilecompression - Determines if the temporary files should be compressed or not (set to false by default).
- pig.tmpfilecompression.codec - Specifies which compression codec to use. Currently, Pig accepts "gz" and "lzo" as possible values. However, because LZO is under GPL license (and disabled by default) you will need to configure your cluster to use the LZO codec to take advantage of this feature. For details, see http://code.google.com/p/hadoop-gpl-compression/wiki/FAQ.
On the non-trivial queries (one ran longer than a couple of minutes) we saw significant improvements both in terms of query latency and space usage. For some queries we saw up to 96% disk saving and up to 4x query speed up. Of course, the performance characteristics are very much query and data dependent and testing needs to be done to determine gains. We did not see any slowdown in the tests we peformed which means that you are at least saving on space while using compression.
With gzip we saw a better compression (96-99%) but at a cost of 4% slowdown. Thus, we don't recommend using gzip.
-- launch Pig script using lzo compression java -cp $PIG_HOME/pig.jar -Djava.library.path=<path to the lzo library> -Dpig.tmpfilecompression=true -Dpig.tmpfilecompression.codec=lzo org.apache.pig.Main myscript.pig
Combine Small Input Files
Processing input (either user input or intermediate input) from multiple small files can be inefficient because a separate map has to be created for each file. Pig can now combined small files so that they are processed as a single map.
You can set the values for these properties:
- pig.maxCombinedSplitSize – Specifies the size, in bytes, of data to be processed by a single map. Smaller files are combined untill this size is reached.
- pig.splitCombination – Turns combine split files on or off (set to "true" by default).
This feature works with PigStorage. However, if you are using a custom loader, please note the following:
- If your loader implementation makes use of the PigSplit object passed through the prepareToRead method, then you may need to rebuild the loader since the definition of PigSplit has been modified.
- The loader must be stateless across the invocations to the prepareToRead method. That is, the method should reset any internal states that are not affected by the RecordReader argument.
- If a loader implements IndexableLoadFunc, or implements OrderedLoadFunc and CollectableLoadFunc, its input splits won't be subject to possible combinations.
Specialized Joins
Replicated Joins
Fragment replicate join is a special type of join that works well if one or more relations are small enough to fit into main memory. In such cases, Pig can perform a very efficient join because all of the hadoop work is done on the map side. In this type of join the large relation is followed by one or more small relations. The small relations must be small enough to fit into main memory; if they don't, the process fails and an error is generated.
Perform a replicated join with the USING clause (see JOIN (inner) and JOIN (outer)). In this example, a large relation is joined with two smaller relations. Note that the large relation comes first followed by the smaller relations; and, all small relations together must fit into main memory, otherwise an error is generated.
big = LOAD 'big_data' AS (b1,b2,b3); tiny = LOAD 'tiny_data' AS (t1,t2,t3); mini = LOAD 'mini_data' AS (m1,m2,m3); C = JOIN big BY b1, tiny BY t1, mini BY m1 USING 'replicated';
Fragment replicate joins are experimental; we don't have a strong sense of how small the small relation must be to fit into memory. In our tests with a simple query that involves just a JOIN, a relation of up to 100 M can be used if the process overall gets 1 GB of memory. Please share your observations and experience with us.
Skewed Joins
Parallel joins are vulnerable to the presence of skew in the underlying data. If the underlying data is sufficiently skewed, load imbalances will swamp any of the parallelism gains. In order to counteract this problem, skewed join computes a histogram of the key space and uses this data to allocate reducers for a given key. Skewed join does not place a restriction on the size of the input keys. It accomplishes this by splitting the left input on the join predicate and streaming the right input. The left input is sampled to create the histogram.
Skewed join can be used when the underlying data is sufficiently skewed and you need a finer control over the allocation of reducers to counteract the skew. It should also be used when the data associated with a given key is too large to fit in memory.
Perform a skewed join with the USING clause (see JOIN (inner) and JOIN (outer)).
big = LOAD 'big_data' AS (b1,b2,b3); massive = LOAD 'massive_data' AS (m1,m2,m3); C = JOIN big BY b1, massive BY m1 USING 'skewed';
Skewed join will only work under these conditions:
- Skewed join works with two-table inner join. Currently we do not support more than two tables for skewed join. Specifying three-way (or more) joins will fail validation. For such joins, we rely on you to break them up into two-way joins.
- The pig.skewedjoin.reduce.memusage Java parameter specifies the fraction of heap available for the reducer to perform the join. A low fraction forces Pig to use more reducers but increases copying cost. We have seen good performance when we set this value in the range 0.1 - 0.4. However, note that this is hardly an accurate range. Its value depends on the amount of heap available for the operation, the number of columns in the input and the skew. An appropriate value is best obtained by conducting experiments to achieve a good performance. The default value is 0.5.
- Skewed join does not address (balance) uneven data distribution across reducers. However, in most cases, skewed join ensures that the join will finish (however slowly) rather than fail.
Merge Joins
Often user data is stored such that both inputs are already sorted on the join key. In this case, it is possible to join the data in the map phase of a MapReduce job. This provides a significant performance improvement compared to passing all of the data through unneeded sort and shuffle phases.
Pig has implemented a merge join algorithm, or sort-merge join. It works on pre-sorted data, and does not sort data for you. See Conditions, below, for restrictions that apply when using this join algorithm. Pig implements the merge join algorithm by selecting the left input of the join to be the input file for the map phase, and the right input of the join to be the side file. It then samples records from the right input to build an index that contains, for each sampled record, the key(s) the filename and the offset into the file the record begins at. This sampling is done in the first MapReduce job. A second MapReduce job is then initiated, with the left input as its input. Each map uses the index to seek to the appropriate record in the right input and begin doing the join.
Perform a merge join with the USING clause (see JOIN (inner) and JOIN (outer)).
C = JOIN A BY a1, B BY b1, C BY c1 USING 'merge';
Condition A
Inner merge join (between two tables) will only work under these conditions:
- Data must come directly from either a Load or an Order statement.
- There may be filter statements and foreach statements between the sorted data source and the join statement. The foreach statement should meet the following conditions:
- There should be no UDFs in the foreach statement.
- The foreach statement should not change the position of the join keys.
- There should be no transformation on the join keys which will change the sort order.
- Data must be sorted on join keys in ascending (ASC) order on both sides.
- If sort is provided by the loader, rather than an explicit Order operation, the right-side loader must implement either the {OrderedLoadFunc} interface or {IndexableLoadFunc} interface.
- Type information must be provided for the join key in the schema.
The PigStorage loader satisfies all of these conditions.
Condition B
Outer merge join (between two tables) and inner merge join (between three or more tables) will only work under these conditions:
- No other operations can be done between the load and join statements.
- Data must be sorted on join keys in ascending (ASC) order on both sides.
- Left-most loader must implement {CollectableLoader} interface as well as {OrderedLoadFunc}.
- All other loaders must implement {IndexableLoadFunc}.
- Type information must be provided for the join key in the schema.
Pig does not provide a loader that supports outer merge joins. You will need to build your own loader to take advantage of this feature.
Merge-Sparse Joins
Merge-Sparse join is a specialization of merge join. Merge-sparse join is intended for use when one of the tables is very sparse, meaning you expect only a small number of records to be matched during the join. In tests this join performed well for cases where less than 1% of the data was matched in the join.
Perform a merge-sparse join with the USING clause (see JOIN (inner)).
a = load 'sorted_input1' using org.apache.pig.piggybank.storage.IndexedStorage('\t', '0'); b = load 'sorted_input2' using org.apache.pig.piggybank.storage.IndexedStorage('\t', '0'); c = join a by $0, b by $0 using 'merge-sparse'; store c into 'results';
Merge-sparse join only works for inner joins and is not currently implemented for outer joins.
For inner joins, the preconditions are the same as for merge join with the exception of constrains on the right-side loader. For sparse-merge joins the loader must implement IndexedLoadFunc or the join will fail.
Piggybank now contains a load function called org.apache.pig.piggybank.storage.IndexedStorage that is a derivation of PigStorage and implements IndexedLoadFunc. This is the only loader included in the standard Pig distribution that can be used for merge-sparse join.
Performance Considerations
Note the following:
- If one of the data sets is small enough to fit into memory, a Replicated Join is very likely to provide better performance.
- You will also see better performance if the data in the left table is partitioned evenly across part files (no significant skew and each part file contains at least one full block of data).


text:
Down cushions are really produced using the creature items. Back, chest and wing quills of ducks and geese are utilized. Dislike pads with the man-influenced filaments, to goose down pads are revived. The down cushions are open in a wide range of sizes and densities run from the ruler to standard.
Why individuals search for Down Pillows:
There are some astonishing advantages of utilizing the down pad and one of them is the capacity to shape a decent bend to your neck and head, giving complete help. The down pads permit wind current around your neck and head zone. There are a wide range of sorts of pads open that shopping is overpowering. The flexible foam, microbead, down, and water pads are a few alternatives in soaked sheet material markets today. Each sort of cushion has got its own particular advantages and disadvantages and requests to the gathering of people of tired heads. I've condensed the most famous cushion composes and their highlights with the goal that you can get a feeling of what may be most suitable for you and your favored dozing position. Give us a chance to see some various types of cushion accessible in the market!
Polyester Pillow Fill
Due to its minimal effort and a high fulfillment rate by gatherings of people, polyester is the well known cushion fill. This is tragically made utilizing the flawed synthetics. In this manner, purchasers must be extremely cautious about the ecological dangers and potential wellbeing that is connected with long haul introduction and creation of polyester.
Focal points of Polyester Pillow:
· Simple to clean
· Very shabby
· Short life expectancy
· Hazardous to our wellbeing and condition
The polyester cushions are useful for side and back sleepers. The stomach sleepers may likewise welcome the polyester pad giving it isn't thick.
Goose Down Pillows
An undercoating of the flying creature's plumes is known as down. Specifically, it is a base and soft piece of the winged creature's plume. Goose down holds the space up to three times any longer than the engineered choices and additionally is delicate. The Hungarian goose down (or European goose down) is considered as the best nature of goose down cushions. The down groups come in unadulterated white and additionally bigger than different kinds. The genuine goose down pad has just down and no plumes. Regularly "down" gets sold as the mix of quill and down fill. The plumes are a temperate method for including a little volume, and frequently's plumes may stick through this cushion jabbing your face when you are resting.
Advantages of Goose Down Pillows:
Pliable The down pad by and large tends to hold the shape well, and offering great help to your neck and head
Agreeable and light – The down pads are lightweight (overwhelming plumes don't function admirably in flying and are to a great degree delicate
· Needs reliable cushioning with a specific end goal to keep up the space
· Tough to clean
· Right ones are expensive


text:
I found this in the laundry pile tonight. I burst into tears, and I haven't yet stopped crying.
Where did that baby go? Where did that baby go? How is it that time slipped past me so quickly, that she grew and grew and grew and the baby she was slipped away – while I wasn't looking? No, I was looking, I was looking so closely, but still she slipped by me – she slipped by me, and even though the she that she is is here and present and brilliant, still, the she that she was slipped by me, and is gone.
And I am left with this. And I am crying.
(This. THIS. Was this so long ago? How could it have been? How could it be?)
(Forgive the roughness of this post. I have temporarily misplaced my laptop, and am desperately tapping this out on my iPhone.)
(And crying.)